2012-06-17 71 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