Assigning result of If operator to System.Nullable type
使用if运算符(http://msdn.microsoft.com/en-us/library/bb513985(v=vs.100).aspx)将值赋给System.Nullable对象时,如果结果为Nothing(空),则将0赋给该对象。
例子:
1 2 | 'Expected value is null (Nothing). Actual value assigned is 0. Dim x As System.Nullable(Of Integer) = If(1 = 0, 1, Nothing) |
如果x是可以为空的类型,为什么要将其指定为默认的整数类型0。它不应该接收空值吗?
值类型上下文中的
1 | Dim x As Integer? = If(1 = 0, 1, 0) |
要使结果可以为空,需要使类型显式。
1 | Dim x As Integer? = If(1 = 0, 1, CType(Nothing, Integer?)) |
而不是以整数形式返回Nothing?只是创建一个新的整数?然后把它还给我。
此外,在处理可为空的类型时,应始终在可为空(t的)上使用.value、.hasValue和.getValueOrDefault方法,而不仅仅是返回对象。因此,在您的情况下,x的值确实是0,但是如果您检查hasValue属性,它应该返回false以指示空情况。同样,如果您想检查
您还可以将示例编写为以下正确的示例:
1 2 3 | Dim x as Integer? = If(1=0, 1, new Integer?) Console.WriteLine(x) Console.WriteLine(x.HasValue) |
输出:无效的假