2015-03-19 17 views
-2
if (i==101) 
    { 
     var lastLoopCheck; 
    } 

的Visual Studio 2013顯示一個錯誤: - 「隱式類型的局部變量必須初始化」爲什麼隱式類型的局部變量必須在C#中初始化,而不是在JavaScript中初始化?

爲什麼?這是什麼原因?

我的第一語言是JavaScript,其中允許未初始化的變量(本地和全局);看看下面的JavaScript代碼:

var foo; 
alert(typeof foo); //undefined 

那麼,爲什麼在JavaScript中不允許未初始化的變量,而不是在C#中?

+1

也見[有沒有什麼辦法在C#中創建隱式類型的全局變量?](http://stackoverflow.com/q/29130382/3899260) – discussedtree 2015-03-19 05:35:49

+1

檢出http://stackoverflow.com/questions/961581/whats-the-difference-between-dynamicc-4-and-var - 你對C#中的'var'有一些嚴重的誤解(它與JavaScript中的'var'非常不同)。 – 2015-03-19 05:41:06

+0

在C#中的東西變量有JavaScript不是類型。所有變量都需要靜態類型語言的類型,C#是一個。 – 2015-03-19 05:43:06

回答

6

C#允許您使用var來指定該類型的評估方式不是明確說明它。這是相當方便的代碼,用於看起來像這樣:

Type<string,int,int,int,int> xyzzy = new Type<string,int,int,int,int>(); 

現在可以改爲做:

var xyzzy = new Type<string,int,int,int,int>(); 

然而,變量本身是仍然靜態類型,因此類型必須在創建變量的位置可用,以便編譯器可以知道如何處理它。

線索就在你看到錯誤消息:

Implicitly-typed local variables must be initialized

請注意,這是隱式類型的而不是類型化。

因此,這些:

int x;  // explicit int. 
var x = 7; // implicit int because we're using int to set it. 
var x;  // no idea what type this should be. 

前兩個是可以的,因爲該類型的信息是可用的。第三個是而不是沒關係,因爲關於您想要的類型的信息不可用。

對比度使用vardynamic - 後者在Javascript中更密切相關,var,它的動態類型(一)和搞清楚什麼可以做它被推遲到運行時。


(一)從技術上講,我認爲這是still considered a static type但常規的類型檢查是在編譯時繞過。

+0

也請清除'$'聲明來完成文章,雖然很好的解釋! – Vikrant 2015-03-19 05:45:09

相關問題