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.ItemRefis 、is NothingORInvoiceLineRet.InvoiceLineRetisのいずれNothingORInvoiceLineRetです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

左の式がに評価される場合、右は評価さTrueOrElseません。

于 2012-10-09T13:57:34.650 に答える