我试图理解为什么两个代码示例的行为不同。我一直认为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
答案 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)