int x;
if (Q())
x = 123;
if (R())
Console.WriteLine(x); // illegal
int x;
if (Q())
x = 123;
if (false)
Console.WriteLine(x); // legal!!
我可以知道为什么第二个是合法的,而前一个是抛出'使用未分配的局部变量'编译时异常?未分配的局部变量之谜
int x;
if (Q())
x = 123;
if (R())
Console.WriteLine(x); // illegal
int x;
if (Q())
x = 123;
if (false)
Console.WriteLine(x); // legal!!
我可以知道为什么第二个是合法的,而前一个是抛出'使用未分配的局部变量'编译时异常?未分配的局部变量之谜
这告诉编译器,下面给出的语句中的if条件永远不会执行,所以未使用的变量的约束不适用于它。
if (false)
Console.WriteLine(x); // legal!!
因为第二个被编译器从未执行过。
由于if(false),由于编译器无法访问第二个代码。尽管编译器会对此发出警告。 –
您从博客文章中复制了代码,但您忘记复制解释:http://blogs.msdn.com/b/ericlippert/archive/2012/03/05/why-are-local-variables-definitely-assigned -in-unreachable-statements.aspx –