這個問題在這里已經有了答案: 錯誤:使用未分配的區域變數 (3 個回答) 昨天關閉。
我對宣告變數,然后在代碼塊(例如 if 陳述句)中初始化/分配這些變數,然后在我的其余代碼中使用該變數感到有些困惑。
如果宣告了“result”且未事先初始化,則以下示例無法將 num1 num2 的結果分配給 if 陳述句中的“result”。
int num1 = 1;
int num2 = 2;
int result; //declared
if (num1 == 1)
{
result = num1 num2;
}
Console.WriteLine(result); //Use of unassigned local variable "result"
但是,事先宣告和初始化“result”成功地更新了 if 陳述句中的“result”值。
int num1 = 1;
int num2 = 2;
int result = 0; //declared and initialized
if (num1 == 1)
{
result = num1 num2;
}
Console.WriteLine(result); //3
此外,如果我將 if 陳述句中的條件簡單地更改為“true”而不是“num1 == 1”,那么前面的兩個示例都可以完美運行。
有人可以向我解釋一下嗎?
uj5u.com熱心網友回復:
如果編譯器result在使用前無法確定是否已初始化,則會失敗并顯示錯誤 CS0165(使用未分配的區域變數)。
考慮到num1它不是一個常量,編譯器不能保證它1在初始化后保持不變并result = mu,1 num2會被執行。這個例子可能看起來微不足道,但是以另一個執行緒可以在初始化num1和檢查之間操作值的方式更改代碼并不困難。但是當您將條件更改為 時true,編譯器可以確定result它將始終在使用之前進行初始化,從而進行編譯。
類似地,whenresult在宣告時被初始化為零,那么編譯器再次保證它在使用之前被初始化。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/342440.html
