web-dev-qa-db-ja.com

IFステートメントは、最初の条件に失敗すると評価を停止しますか?

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

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

ダブルアンパサンド&&演算子を使用しているため、評価が停止します。これは short-circuiting と呼ばれます。

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

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

両方を評価します。

81
Paul Spangle

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

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

そして、ジェイコブが||、最初の条件がtrueの場合、2番目の条件は評価されません。

21
MBen

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

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

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

7

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

&を使用すると、考慮されます

4
Jigar Joshi

以下を考慮してください。

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がfalseであっても関数が評価されます。

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

2
BugFinder

この例では、2番目のステートメントは、最初のステートメントが失敗した場合にのみ評価されます。論理AND &&は、両方のオペランドがtrueの場合、つまり短絡評価の場合にのみtrueを返します。

1
dtsg

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

1
Akash KC

式は論理AND演算であるため、左から右に評価されます。 falseの場合、評価を停止します。また、式の操作の中で最も優先順位が高くなります。

条件付きAND演算子(&&)は、boolオペランドの論理ANDを実行しますが、必要な場合にのみ2番目のオペランドを評価します。 条件付きAnd演算子(&&) MSDN

以下に、一連の 最高の優先順位から最低のC#演算子をリストするセクション を示します。

0
Travis J