2016-05-15 16 views
0

猜的i结果:Visual Basic中的可空类型推断 - 是否在某处存在文档并且可以使其更加严格?

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

答:0

如果你希望得到Nothing,必须修改整数参数:

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

正如你所看到的,在Nullable(Of T)之前,来自第二和第三参数的结果类型推断优选T。对我而言,逻辑是相反的。

如果可以找到这些推理/优先级规则的类型(尤其是Nullable)可以找到文件?我检查了帮助type inference,NullableIf,但我找不到任何东西。

甲窥视到邻居:(很好)拒绝,错误

无法确定条件表达式的CS0173型因为'<null>'之间的隐式转换以编译的等效

int? i = true ? null : 3; 

和'int'

什么是安全的,避免陷入捕获看n在。但在VB中,即使Option Infer Off + Option Strict On也没有任何错误抛出的效果,这可以帮助程序员避免被忽视的错误。 或者有没有办法在中产生错误?

+0

@GSerg - 哈,我总是想知道是否有一个有效的理由可以存在,我会投票结束我自己的问题。现在我投了... – miroxlav

回答

0

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

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

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

结果:i Is Nothing

所以可能出现的问题是,Nothing似乎是由编译器首先视为默认值其他类型(Integer)比null。改变其隐含意义有助于。反正一个棘手的地方。 如果有人可以找到这个记录,这将是很好的。(我不坚持这个答案)。如果VB可以在这种情况发生时被强制抛出一个错误或警告,这与C#类似。


comment其他地方看到,符号的形式,更好的可能存在:

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

不错!

+0

这也可以 - Dim i As Integer? = If(True,Nothing,New Nullable(Of Integer)(3)) – dbasnett

相关问题