【问题标题】:Nullable object must have a value - vb date fields可空对象必须有一个值 - vb 日期字段
【发布时间】:2012-02-23 07:29:19
【问题描述】:

好的,我之前看到的有关此错误的问题似乎都不适用于这种情况。

tEmp 是一个包含(除其他外)两个可为空的日期字段的类。

Public Property InsuranceEligibleDate As Nullable(Of Date)
Public Property NextReview As Nullable(Of Date)

在我的表单例行程序中,我正在尝试查看以下条件是否为真...

If Not IsNothing(tEmp.NextReview.Value) Or tEmp.ReviewReason <> "" Or Not IsNothing(tEmp.InsuranceEligibleDate.Value) Then
    blah blah blah
End If

我收到上述错误(问题的标题),但是当我将鼠标悬停在调试器上时,NextReview 和 InsuranceEligibleDate 都没有(这对我正在查看的员工来说是正确的)。我错过了什么?

我用的是VB2010,Employee类中的Properties使用的是新的Properties声明方式(即没有set/get)

【问题讨论】:

    标签: vb.net vb.net-2010


    【解决方案1】:

    您正在尝试从可能为空的值中获取值,您需要进行如下检查:

    If Not tEmp.NextReview.HasValue Or tEmp.ReviewReason <> "" Or Not tEmp.InsuranceEligibleDate.HasValue Then
        blah blah blah
    End If
    

    【讨论】:

    • 你想要If tEmp.NextReview.HasValue,没有Not关键字;-)
    • 另外,你应该养成使用OrElse(短路或)而不是Or的习惯
    【解决方案2】:

    当您使用 value 检查 Nothing 时,您会收到异常,因为您尝试访问 null 对象上的属性。请改用 HasValue 属性来确定是否存在值。

    【讨论】:

      【解决方案3】:

      当使用Nullable 时,要检查一个值是否存在是.HasValue

      所以你的代码最好写成:

      If tEmp.NextReview.HasValue Or tEmp.ReviewReason <> "" Or tEmp.InsuranceEligibleDate.HasValue Then
          blah blah blah
      End If
      

      【讨论】:

        【解决方案4】:

        这是我在使用Or 运算符时遇到的一个问题。简单地使用Or 仍然会导致表达式的两边都被计算。因此,如果第一部分是空检查,而第二部分基于该空检查,则第二部分仍将失败,因为它仍在评估中。正确的用法是使用OrElse 运算符,如下所示(哦,您应该使用.HasValue 属性以及可空值)。另一个注意事项是您应该使用 String.IsNullOrWhiteSpace 而不是 &lt;&gt; 来评估空字符串。对于 3.5,它是 String.IsNullOrEmpty

        If tEmp.NextReview.HasValue OrElse Not String.IsNullOrWhiteSpace(tEmp.ReviewReason) OrElse tEmp.InsuranceEligibleDate.HasValue Then
            blah blah blah
        End If
        

        【讨论】:

        • 你想要If tEmp.NextReview.HasValue,没有Not关键字;-)
        • @Meta-Knight:谢谢。打字太快我没有校对代码结果。
        • 一如既往的快速解决方案。谢谢大家!
        猜你喜欢
        • 1970-01-01
        • 2010-12-26
        • 2012-02-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多