If()函数中可空整数的默认值不同

时间:2010-12-07 22:38:50

标签: .net vb.net integer nullable

我试图理解为什么两个代码示例的行为不同。我一直认为If()函数可以模仿If语言特性。或者我是否正在查看导致此问题的Nullable(Of Integer)行为?

示例#1:

If Not String.IsNullOrWhiteSpace(PC.SelectedValue) Then

    Dim pcFilter1 As Integer? = CInt(PC.SelectedValue)

Else

    Dim pcFilter1 As Integer? = Nothing

End If

示例#2:

Dim pcFilter2 As Integer? = If(Not String.IsNullOrWhiteSpace(PC.SelectedValue),
                               CInt(PC.SelectedValue),
                               Nothing)

结果:

pcFilter1 = Nothing

pcFilter2 = 0

1 个答案:

答案 0 :(得分:7)

在样本#2中,您的CInt演员导致了问题。 If()构造尝试确定第2和第3个参数的公共类型。将第二个参数看作一个整数,然后将Nothing转换为一个整数,由于VBs魔法铸造导致结果为0.例如

Dim i As Integer = Nothing 'results in i being set to 0

要使用If()获得所需内容,请尝试以下操作:

Dim pcFilter2 As Integer? = If(Not String.IsNullOrWhiteSpace(PC.SelectedValue),
                           New Integer?(CInt(PC.SelectedValue)),
                           Nothing)