gpt4 book ai didi

VB.NET If(三元)错误

转载 作者:行者123 更新时间:2023-12-03 00:34:43 27 4
gpt4 key购买 nike

我在 VB.NET 中发现了一个可以轻松重现的简单错误:

Dim pDate As Date?
Dim pString As String = ""

' works fine as expected
pDate = If(False, "", Nothing)

' expected: pDate will be set to Nothing.
' BUG: Conversion from string "" to type 'Date' is not valid.
pDate = If(False, pString, Nothing)

'These both fail with the same error
pDate = pString
Dim pDate2 As Date? = ""

问题:这是一个错误吗?或者我或我的电脑有问题吗?如果这是一个错误,是否有错误报告(我似乎找不到)?

经验教训:

  1. 这不是错误
  2. 可为 null 的日期不接受任何对象
  3. 可空日期拒绝任何字符串
<小时/>
pDate = Nothing ' ok. nullable date accepts object nothing
pString = Nothing
pDate = pString ' error. nullable date rejects string nothing

最佳答案

该错误出现在您第一次使用 If() 时,而不是第二次使用时。与您的评论相反,结果并非“预期”。该调用应该失败,因为“”无法转换为日期,并且无论是否使用表达式,三元运算符在所有级别都是类型安全的。

我怀疑它之所以成功是因为编译器优化:因为一切都是文字,所以条件被优化掉了。第二次优化会比较困难,因为 pString 变量可能会被编译器尚不知道的另一个线程更改。

熟悉 IL 的人可能可以证实这一点。

真正令我惊讶的是,直到运行时才捕获到这一点。我希望编译器能够注意到类型不匹配并在该级别进行提示,而不是等到执行。您的 VB 选项设置可能与此有关。

关于VB.NET If(三元)错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7211932/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com