好的,我在此错误中看到的所有问题似乎都不适用于这种情况。
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正在使用声明属性的新方法(即没有设置/获取)
答案 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
检查某个值是否存在时,.HasValue
为If tEmp.NextReview.HasValue Or tEmp.ReviewReason <> "" Or tEmp.InsuranceEligibleDate.HasValue Then
blah blah blah
End If
。
所以你的代码最好放在:
{{1}}
答案 3 :(得分:0)
当您使用值检查Nothing时,您会收到异常,因为您尝试访问null对象上的属性。请改用HasValue属性来确定是否存在值。