VB.NET中的三元运算符可能存在哪些bug问题?

2026-05-06 10:481阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计452个文字,预计阅读时间需要2分钟。

VB.NET中的三元运算符可能存在哪些bug问题?

在VB.NET中,我发现了一个可以轻松复制的简单错误:`Dim pDate As Date? Dim pString As String=` 这段代码运行正常。然而,`pDate=If(False, , Nothing)` 这段代码预期 `pDate` 应设置为 `Nothing`,但实际上出现了错误。错误信息显示:BUG:从字符串 转换为 Date 时出错。

我在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? = ""

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

得到教训:

>这不是一个错误
>可空日期不接受任何对象
>可以为空的日期拒绝字符串

pDate = Nothing ' ok. nullable date accepts object nothing pString = Nothing pDate = pString ' error. nullable date rejects string nothing 错误是你第一次使用If(),而不是第二次.与您的评论相反,结果并非“预期”.该调用应该失败,因为“”无法转换为日期,并且三元运算符在所有级别都是类型安全的,无论是否使用该表达式.

VB.NET中的三元运算符可能存在哪些bug问题?

我怀疑它是成功的,因为编译器优化:因为一切都是文字,条件被优化了.第二次进行优化比较困难,因为pString变量可能被编译器还不知道的另一个线程改变了.

对IL有用的人可能会证实这一点.

对我来说真正的惊喜是,直到运行时才会发现这一点.我希望编译器注意到类型不匹配并在该级别进行抱怨,而不是等到执行.您的VB选项设置可能与此有关.

本文共计452个文字,预计阅读时间需要2分钟。

VB.NET中的三元运算符可能存在哪些bug问题?

在VB.NET中,我发现了一个可以轻松复制的简单错误:`Dim pDate As Date? Dim pString As String=` 这段代码运行正常。然而,`pDate=If(False, , Nothing)` 这段代码预期 `pDate` 应设置为 `Nothing`,但实际上出现了错误。错误信息显示:BUG:从字符串 转换为 Date 时出错。

我在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? = ""

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

得到教训:

>这不是一个错误
>可空日期不接受任何对象
>可以为空的日期拒绝字符串

pDate = Nothing ' ok. nullable date accepts object nothing pString = Nothing pDate = pString ' error. nullable date rejects string nothing 错误是你第一次使用If(),而不是第二次.与您的评论相反,结果并非“预期”.该调用应该失败,因为“”无法转换为日期,并且三元运算符在所有级别都是类型安全的,无论是否使用该表达式.

VB.NET中的三元运算符可能存在哪些bug问题?

我怀疑它是成功的,因为编译器优化:因为一切都是文字,条件被优化了.第二次进行优化比较困难,因为pString变量可能被编译器还不知道的另一个线程改变了.

对IL有用的人可能会证实这一点.

对我来说真正的惊喜是,直到运行时才会发现这一点.我希望编译器注意到类型不匹配并在该级别进行抱怨,而不是等到执行.您的VB选项设置可能与此有关.