2012-06-17 76 views
0
int x; 
    if (Q()) 
     x = 123; 
    if (R()) 
     Console.WriteLine(x); // illegal 

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

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

+0

由于if(false),由于编译器无法访问第二个代码。尽管编译器会对此发出警告。 –

+5

您从博客文章中复制了代码,但您忘记复制解释:http://blogs.msdn.com/b/ericlippert/archive/2012/03/05/why-are-local-variables-definitely-assigned -in-unreachable-statements.aspx –

回答

2

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

if (false) 
     Console.WriteLine(x); // legal!! 
1

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

1

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

+1

这只能解释为什么第一个给出错误,而不是为什么第二个错误没有。 – Guffa