0

私はVB.NETを初めて使用しますが、C、C ++、C#、およびその他の言語については、数年の経験があります。私にとってこの問題は、私が以前に会ったことがないので、非常に奇妙です。

私はこのコード行を持っています:

If obj is Nothing Or obj.IsDisposed Then
'do some stuffs
End If

このコード行では、obj.IsDisposedが存在しない(ハンドルがない)ため、objがNothingの場合にエラーが表示されます。私が知っているように、Or itの最初のステートメントはTrueを返すので、どのような場合でもIfステートメントの結果はTrueになります。

誰かが私にこれを取り除く方法を教えてもらえますか(または私はIf..Then..Else If..End Ifを書く必要があります)

4

3 に答える 3

2

OrElseを試してください。「objisNothing」がtrueの場合、obj.Disposedは評価されません。

If obj is Nothing OrElse obj.IsDisposed Then
'do some stuffs
End If
于 2012-09-03T05:34:58.263 に答える
1

最初の評価が true の場合、2 番目の評価をバイパスするOrElse 演算子を使用できます。

上記のリンクから:

コンパイルされたコードが別の式の結果に応じて 1 つの式の評価をバイパスできる場合、論理演算はショートサーキットであると言われます。評価された最初の式の結果が操作の最終結果を決定する場合、最終結果を変更できないため、2 番目の式を評価する必要はありません。バイパスされた式が複雑な場合、またはプロシージャ コールが含まれる場合は、短絡によりパフォーマンスが向上する可能性があります。

于 2012-09-03T05:39:32.867 に答える
0

OrElse必要なものです。すでに評価されている限り、最初の評価でのみ評価されますtrue

If obj is Nothing OrElse obj.IsDisposed Then
    'do some stuffs
End If
于 2012-09-03T05:42:25.210 に答える