-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!!

我可以知道为什么第二个是合法的,而前一个是抛出“使用未分配的局部变量”编译时异常吗?

4

3 回答 3

3

这告诉编译器下面给出的语句中的 if 条件将永远不会执行,因此未使用变量的约束不适用于它。

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

因为第二个被编译器消除为从未执行过。

于 2012-06-17T13:37:22.597 回答
1

如果 Q() == FALSE 且 R() == true,则 x 未设置,它将尝试使用它。

于 2012-06-17T13:39:19.393 回答