下面的代碼產生一個 "使用未分配的區域變數'foo'"的錯誤。通過將double foo;替換為var foo = 0d;,這很容易解決,但是我想了解,為什么編譯器(Visual Studio)會抱怨。在我看來,如果不在for回圈中賦值var bar = foo;,就不可能達到foo。
class Program<
{
static void Main(string[] args)?
{
double foo。
for (var i = 0; i <=5; i )
{
foo = 1.23;
}
var bar = foo;
}
多謝。
uj5u.com熱心網友回復:
當編譯器遇到一個可能導致使用未賦值變數的結構時,就會產生這個錯誤,即使你的特定代碼沒有。這就避免了為明確的賦值制定過于復雜的規則的必要性。
uj5u.com熱心網友回復:
回圈引數通常在運行時進行評估,因此編譯器無法知道你的回圈的條件。因為for回圈顯然有可能根本不運行(如果條件最初是假的),編譯器會以錯誤警告你可能使用了一個未分配的變數。
uj5u.com熱心網友回復:
因為編譯器不能確定foo是否會在回圈中被分配。也許在你的例子中可以推斷,但編譯器就是不支持這樣。另外,在C#中,宣告沒有初始值的變數是一種不好的做法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/316183.html
標籤:
上一篇:ReactJS未處理的拒絕(TypeError):item.persistVariablesLimit.trim不是一個函式
下一篇:在SQL查詢中添加變數
