【问题标题】:Default value of nullable integer different in If() functionIf() 函数中不同的可空整数的默认值
【发布时间】:2010-12-07 22:38:50
【问题描述】:

我试图了解为什么这两个代码示例的行为不同。我一直相信 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 = 没有

pcFilter2 = 0

【问题讨论】:

    标签: .net vb.net integer nullable


    【解决方案1】:

    在示例 #2 中,您的 CInt 演员导致了问题。 If() 构造尝试确定第二个和第三个参数的通用类型。将第二个参数视为整数,然后将 Nothing 转换为整数,由于 VB 的魔法转换导致 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-10
      • 1970-01-01
      • 2011-09-20
      • 1970-01-01
      • 1970-01-01
      • 2019-09-12
      相关资源
      最近更新 更多