272

AndVB.NET では、との違いは何AndAlsoですか? どちらを使用する必要がありますか?

4

12 に答える 12

413

演算子はAnd両側をAndAlso評価し、 where は左側が真の場合にのみ右側を評価します。

例:

If mystring IsNot Nothing And mystring.Contains("Foo") Then
  ' bla bla
End If

上記は、次の場合に例外をスローしますmystring = Nothing

If mystring IsNot Nothing AndAlso mystring.Contains("Foo") Then
  ' bla bla
End If

これは例外をスローしません。

したがって、C# の世界から来た場合は、 を使用するAndAlsoように使用する必要があります&&

詳細はこちら: http://www.panopticoncentral.net/2003/08/18/the-ballad-of-andalso-and-orelse/

于 2008-11-19T14:42:31.787 に答える
35

演算子は続行する前にステートメント内のAndすべての条件をチェックしますが、Andalso 演算子は条件が false であることがわかっている場合は停止します。例えば:

if x = 5 And y = 7

x が 5 に等しいかどうかを確認し、y が 7 に等しい場合は、両方が true の場合に続行します。

if x = 5 AndAlso y = 7

x が 5 に等しいかどうかを確認します。そうでない場合は、条件が既に false であることを知っているため、y が 7 であるかどうかを確認しません。(これを短絡といいます。)

一般に、チェックすると例外がスローされる場合など、最初の部分が true でない場合に 2 番目の部分を明示的にチェックしない理由がある場合、短絡メソッドが使用されます。例えば:

If Not Object Is Nothing AndAlso Object.Load()

Andそれがの代わりに使用された場合、それがであったとしても例外をスローAndAlsoしようとします。Object.Load()nothing

于 2008-11-19T14:44:56.353 に答える
14
If Bool1 And Bool2 Then

Bool1 と Bool2 の両方を評価します

If Bool1 AndAlso Bool2 Then

Bool1 が true の場合にのみ、Bool2 を評価します。

于 2008-11-19T14:42:59.727 に答える
13

副作用は悪であると言うすべての人々のために: 1 つの状態で 2 つの副作用を持つことが良い場所は、2 つのファイル オブジェクトを並行して読み取ることです。

While File1.Seek_Next_Row() And File2.Seek_Next_Row()
    Str1 = File1.GetRow()
    Str2 = File2.GetRow()
End While

を使用Andすると、条件がチェックされるたびに行が消費されます。一方AndAlso、の最後の行を読み取り、消費された行なしでFile1終了する場合があります。File2

もちろん、上記のコードは機能しませんが、私は常にこのような副作用を使用しており、「悪い」または「邪悪な」コードとは考えていません。読みやすく、効率的です。

于 2011-01-26T23:34:39.800 に答える
6

AndAlso は And によく似ていますが、C# や C++ などでは && のように機能します。

違いは、最初の句 (AndAlso の前の句) が true の場合、2 番目の句は評価されないことです。つまり、複合論理式は「短絡」されます。

これは、次のような式で非常に便利な場合があります。

If Not IsNull(myObj) AndAlso myObj.SomeProperty = 3 Then
   ...
End If

上記の式で古い And を使用すると、myObj が null の場合に NullReferenceException がスローされます。

于 2008-11-19T14:45:02.903 に答える
5

それについて考える簡単な方法は、より平易な英語を使用することです

If Bool1 And Bool2 Then
If [both are true] Then


If Bool1 AndAlso Bool2 Then
If [first is true then evaluate the second] Then
于 2011-12-14T10:44:51.660 に答える
5

スタック オーバーフローの質問も参照してください: AndAlso および OrElse 演算子を常に使用する必要がありますか? .

Andまた:式の右側に必要な副作用がある場合の使用について言及した人へのコメント:

右側に必要な副作用がある場合は、「And」を使用するのではなく、左側に移動してください。両側に副作用がある場合にのみ、「And」が必要です。そして、これほど多くの副作用が起こっている場合は、おそらく別のことをしている可能性があります. 一般に、AndAls を使用することをお勧めします。

于 2008-11-19T15:01:26.523 に答える
0

タラではなく言葉で理解するには:

ユースケース:
「And」を使用すると、コンパイラはすべての条件をチェックするため、オブジェクトが「Nothing」である可能性があることをチェックし、そのプロパティの 1 つをチェックすると、実行時エラーが発生します。
しかし、条件の最初の「false」で AndAlso を使用すると、次の条件がチェックされるため、エラーは発生しません。

于 2019-12-27T07:10:41.323 に答える