http://huan-lin.blogspot.com/2009/01/implicit-type-declaration-in-c-30.html
C# 3.0 增加了 var 關鍵字,你可以用它來宣告隱含型別,例如:
int i = 10;
var j = 10;
這兩行的作用完全相同,連編譯出來的 IL code 也都一個模樣:
.locals init (
[0] int32 i,
[1] int32 j)
L_0001: ldc.i4.s 10
L_0003: stloc.0
L_0004: ldc.i4.s 10
L_0006: stloc.1
因為 var 變數其實是靜態繫結的變數,亦即編譯時期就已經決定變數型別了。
那麼編譯器如何決定型別?透過你指定給變數的初始值來推測。因此,使用 var 變數有個基本前提:一定要給初始值。否則編譯時會出現錯誤:Implicitly-typed local variables must be initialized。
再看一個 var 的範例:
var numbers = new[] { 10, 20, 30, 40 }; foreach (var x in numbers) { Console.WriteLine(x); }編譯器將會推測 numbers 的型別為整數陣列(int32[]),迴圈計數值 x 則為 int32。注意在建立此整數陣列時,使用的語法是 new[] 而不是一般的 new[int]。此外,使用 var 宣告陣列時,陣列的所有元素都必須是同一型別,否則編譯器無法決定該用甚麼型別。因此,下面這行寫法將無法通過編譯:
var mixedAry = new[] { 10, "abc" }; // Error! 編譯器無法決定該用什麼型別.
string[] fruits = { "apple", "banana", "mango" }; var items = from s in fruits where s.EndsWith("go") select s; foreach (var item in items) { Console.WriteLine(item); }