可空对象必须具有值 - vb日期字段

时间:2012-01-31 15:13:22

标签: vb.net vb.net-2010

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

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都是Nothing(这对我正在查看的员工来说是正确的)。我错过了什么?

我正在使用VB2010,而Employee类中的Properties正在使用声明属性的新方法(即没有设置/获取)

4 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

您正试图从可能为空的值中获取值,您需要像这样进行检查:

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

答案 2 :(得分:1)

当使用Nullable检查某个值是否存在时,.HasValueIf tEmp.NextReview.HasValue Or tEmp.ReviewReason <> "" Or tEmp.InsuranceEligibleDate.HasValue Then blah blah blah End If

所以你的代码最好放在:

{{1}}

答案 3 :(得分:0)

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