使用If运算符( http://msdn.microsoft.com/en-us/library/bb513985(v=VS.100).aspx)将值赋给System.Nullable对象时,如果结果为Nothing(null),则为该对象分配0. 例: 'Expected value is null (Nothing). Actual value assigned is
例:
'Expected value is null (Nothing). Actual value assigned is 0. Dim x As System.Nullable(Of Integer) = If(1 = 0, 1, Nothing)
如果x是可空类型,为什么它被赋值为0的默认整数类型.它不应该接收null值吗?
值类型上下文中的任何内容都不会解析为该类型的默认值.对于整数,这只是0.If运算符在其参数类型之间不进行任何转换,它们都被平等对待 – 在您的情况下为Integer.因此你的代码是相同的
Dim x As Integer? = If(1 = 0, 1, 0)
要使结果可为空,您需要使类型显式化.
Dim x As Integer? = If(1 = 0, 1, CType(Nothing, Integer?))