我试图测试一个对象在得到它的值之前是否为空,但是我得到一个错误“NullReferenceException”
发生在第一行:
If Not ORInvoiceLineRet.InvoiceLineRet.ItemRef.FullName Is Nothing Then
li.FullName = ORInvoiceLineRet.InvoiceLineRet.ItemRef.FullName.GetValue()
End If
System.NullReferenceException {“对象引用未设置为对象的实例。”}
如何在不尝试处理try / catch中的错误的情况下对此进行测试?
答案 0 :(得分:7)
涉及的对象越多越好:
ORInvoiceLineRet
可能一无所有ORInvoiceLineRet.InvoiceLineRet
可能一无所有ORInvoiceLineRet.InvoiceLineRet.ItemRef
可能一无所有ORInvoiceLineRet.InvoiceLineRet.ItemRef.FullName
可能一无所有所以这里唯一安全的方法是:
If ORInvoiceLineRet IsNot Nothing _
AndAlso ORInvoiceLineRet.InvoiceLineRet IsNot Nothing _
AndAlso ORInvoiceLineRet.InvoiceLineRet.ItemRef IsNot Nothing _
AndAlso ORInvoiceLineRet.InvoiceLineRet.ItemRef.FullName IsNot Nothing Then
li.FullName = ORInvoiceLineRet.InvoiceLineRet.ItemRef.FullName.GetValue()
End If
答案 1 :(得分:2)
ORInvoiceLineRet.InvoiceLineRet.ItemRef
为Nothing
,ORInvoiceLineRet.InvoiceLineRet
为Nothing
或ORInvoiceLineRet
为Nothing
。
很难访问Nothing
的属性,因此会抛出NullReferenceException
。
您可以使用OrElse
If Not (ORInvoiceLineRet Is Nothing OrElse _
ORInvoiceLineRet.InvoiceLineRet Is Nothing OrElse _
ORInvoiceLineRet.InvoiceLineRet.ItemRef Is Nothing OrElse _
ORInvoiceLineRet.InvoiceLineRet.ItemRef.FullName Is Nothing)
End If
如果左表达式的评估结果为True
,则OrElse
将无法评估该权利。