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 –