猜猜结果i
:
Dim i As Integer? = If(True, Nothing, 3)
回答: 0
如果希望得到Nothing
,则必须修改integer参数:
Dim i As Integer? = If(True, Nothing, New Nullable(3))
如您所见,从2nd和3rd参数推断结果类型优先T
于Nullable(Of T)
。对我来说,逻辑上是相反的。
在哪里Nullable
可以找到这些类型的推论/优先级规则(特别是的)?我检查的帮助type inference
,Nullable
和If
,但我无法找到任何东西。
偷看邻居:C#(很好)拒绝编译等效项
int? i = true ? null : 3;
有错误
CS0173无法确定条件表达式的类型,因为在
'<null>'
和'int'之间没有隐式转换
什么是安全的,并避免陷入vb.net中的陷阱。但是在VB中,即使Option Infer Off
+Option Strict On
也没有任何抛出错误的效果,这可以使程序员免受未注意的错误的影响。还是有办法在vb.net中也产生错误?
好的,现在我了解了。罪魁祸首是对的解释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] 删除。
我来说两句