-1
    int x;
    if (Q())
        x = 123;
    if (R())
        Console.WriteLine(x); // illegal

    int x;
    if (Q())
        x = 123;
    if (false)
        Console.WriteLine(x); // legal!!

前者が「割り当てられていないローカル変数を使用して」コンパイル時例外をスローしているのに、なぜ2番目のものが有効なのかわかりますか?

4

3 に答える 3

3

これは、以下のステートメントのifの下の条件が実行されないことをコンパイラーに通知するため、未使用の変数の制約は適用されません。

if (false)
        Console.WriteLine(x); // legal!!
于 2012-06-17T13:38:13.783 に答える
1

2つ目は、コンパイラによって実行されないために削除されるためです。

于 2012-06-17T13:37:22.597 に答える
1

Q()== FALSEおよびR()== trueの場合、xは設定されておらず、それを使用しようとします。

于 2012-06-17T13:39:19.393 に答える