Visual Basic中的可空类型推断–是否已在某处进行了说明,并且可以使其更严格吗?

米罗斯拉夫

猜猜结果i

Dim i As Integer? = If(True, Nothing, 3)

回答: 0

如果希望得到Nothing,则必须修改integer参数:

Dim i As Integer? = If(True, Nothing, New Nullable(3))

如您所见,从2nd和3rd参数推断结果类型优先TNullable(Of T)对我来说,逻辑上是相反的。

在哪里Nullable可以找到这些类型的推论/优先级规则(特别是的)?我检查的帮助type inferenceNullableIf,但我无法找到任何东西。

偷看邻居:(很好)拒绝编译等效项

int? i = true ? null : 3;

有错误

CS0173无法确定条件表达式的类型,因为在'<null>'和'int'之间没有隐式转换

什么是安全的,并避免陷入的陷阱但是在VB中,即使Option Infer Off+Option Strict On也没有任何抛出错误的效果,这可以使程序员免受未注意的错误的影响。还是有办法在也产生错误

米罗斯拉夫

好的,现在我了解了。罪魁祸首是对的解释Nothing

更改Nothing为“ true”null会导致正确的结果:

Dim i As Integer? = If(True, New Nullable(Of Integer), 3)

结果: i Is Nothing

因此可能的问题是,Nothing编译器似乎首先将其视为其他类型(整数)而非a的默认值null更改其隐含含义会有所帮助。无论如何,还是一个棘手的地方。如果有人可以找到此文档,那将是很好的。(我没有坚持要回答这个问题。)如果在发生这种情况时可以迫使VB抛出错误或警告,那将是很棒的事情,类似于C#。


曾经出现在评论其他地方,符号的形式,更好的可能存在:

Dim i As Integer? = If(True, Integer?, 3)

好的!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章