2

我试图在得到它的值之前测试一个对象是否什么都不是,但我得到一个错误“NullReferenceException”

发生在这里的第一行:</p>

If Not ORInvoiceLineRet.InvoiceLineRet.ItemRef.FullName Is Nothing Then
    li.FullName = ORInvoiceLineRet.InvoiceLineRet.ItemRef.FullName.GetValue()
End If

System.NullReferenceException {“对象引用未设置为对象的实例。”}

我如何测试这一点,而不仅仅是处理 try/catch 中的错误?

4

2 回答 2

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
于 2012-10-09T14:00:10.793 回答
2

要么ORInvoiceLineRet.InvoiceLineRet.ItemRefNothing,要么ORInvoiceLineRet.InvoiceLineRet是,Nothing要么ORInvoiceLineRetNothing

很难访问Nothingso a的属性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

如果左表达式计算结果为TrueOrElse则不会计算右表达式。

于 2012-10-09T13:57:34.650 回答