53

2 つの条件を持つIfステートメントがあり、最初の条件が失敗した場合、2 番目の条件も考慮されelseますか? したがって、次の例では、 ifmyList.Count == 0myString「値」と比較されますか、それとも単純にelseですか?

if(myList.Count > 0 && myString.Equals("value"))
{
//Do something
}
else
{
//Do something else
}
4

8 に答える 8

95

二重アンパサンド && 演算子を使用しているため、評価が停止します。これを短絡と呼びます。

単一のアンパサンドに変更した場合:

if(myList.Count > 0 & myString.Equals("value"))

両方を評価します。

于 2012-07-06T08:31:15.607 に答える
23

いいえ、考慮されません。(これは短絡として知られています。)

falseコンパイラは、最初の条件がである場合、式が に評価される方法がないことを知るのに十分賢い (そして言語仕様で必要とされる) true

Jacob が指摘し||たように、最初の条件が のtrue場合、2 番目の条件は評価されません。

于 2012-07-06T08:29:03.260 に答える
7

論理演算子が AND (&&) の場合、IF ステートメントは最初の式を評価します。最初の式が false の場合、2 番目の式は評価されません。これは、参照でメソッドを呼び出す前に変数が null かどうかを確認するのに役立ちます - null ポインター例外を避けるために

論理演算子が OR (||) の場合、IF ステートメントは最初の式を評価します。最初の式が真の場合、2 番目の式は評価されません。

コンパイラとランタイムは、この動作に合わせて最適化されています

于 2012-07-06T08:32:35.270 に答える
4

いいえ、を使用すると、2 番目の条件はスキップされます&&

使用する場合&は考慮されます

于 2012-07-06T08:29:55.523 に答える
2

次のことを考慮してください。

static int? x;
static int? y;

static void Main(string[] args)
{
    x = 5;
    if (testx() & testy())
    {
        Console.WriteLine("test");
    }
}

static Boolean testx()
{
    return x == 3;
}

static Boolean testy()
{
    return y == 10;
}

トレースすると、testx が false であっても、testx と testy の両方の関数が評価されます。

テストを && に変更すると、最初のものだけがチェックされます。

于 2012-07-06T08:36:53.417 に答える
1

あなたの例では、最初のステートメントが失敗した場合にのみ、2 番目のステートメントが評価されます。論理 ANDは、両方のオペランドが true の場合&&にのみ返されます (短絡評価とも呼ばれます) 。true

于 2012-07-06T08:30:54.217 に答える
1

.NET はサポートしているshort circuitingため、最初の条件が失敗した場合、2 番目の条件はチェックされません....C# では || および && は、論理演算子 | の短絡バージョンです。および & それぞれ....多くの場合、高速すぎます...

于 2012-07-06T08:34:53.330 に答える