VB.NET 2015 Nullable Integer不能使用If()运算符?

时间:2017-05-07 16:56:32

标签: vb.net visual-studio-2015 nullable

为什么此结果 0 (零)且没什么

Dim foobar As Integer? = If(False, 1, Nothing)

From Microsoft Documentation:

  

如果变量属于值类型,则Nothing的行为取决于   变量是否为可空数据类型。代表一个   可空值类型,添加?修饰符到类型名称。分配   无可变变量的任何内容都将值设置为null。更多   信息和示例,请参见Nullable Value Types。

进一步的研究会产生更多有趣的结果:

Dim foo As Integer? = If(False, 1, Nothing)             '0
Dim bar As String = If(False, 1, Nothing)               '"0"
Dim bar2 As String = If(False, "1", Nothing)            'Nothing
Dim bar3 As Integer? = If(False, "1", Nothing)          'Nothing
Dim bar4 As Integer? = If(False, CStr(1), Nothing)      '0

以下建议结果类型是否基于 类型 第二个值?

Dim bar3 As Integer? = If(False, "1", Nothing)          'Nothing

已编辑以及其他发现和所需结果,但为什么需要评估BOTH参数而不仅仅是If()的短路版本?

Dim foo As Integer? = IIf(False, 1, Nothing)             'Nothing

1 个答案:

答案 0 :(得分:0)

除了 dbasnett 的回答,您还可以:

Dim foo As Integer? = If(False, 1, CType(Nothing, Integer?))