編譯器正確推斷各變量類型並嵌入元數據:
var i = 5; var s = "hi"; var d = 1.5;
// IL: int32, string, float64
var ia = new[] { 1, 2, 3, 4, 5 }; // int[]
var da = new[] { 1.1, 2, 3, 4, 5 }; // double[](int 隱式轉 double)
var sa = new[] { "Hello", "World" }; // string[]
所有元素必須隱式可轉換為單一「最佳類型」:
// 合法:int → double 隱式轉換
var mixed = new[] { 1, 2.5, 3 }; // double[]
// 非法:無共同最佳類型
var bad = new[] { 1, "hello", 2.0 }; // ❌ 編譯錯誤
var book = new Book
{
Name = "First",
Isbn = "111",
Price = 88f
};
// 屬性順序任意、可部分賦值、可留空
var book = new Book();
book.Name = "First";
book.Isbn = "111";
book.Price = 88f;
ICollection<T>
List nums = new List { 0,1,2,3,4,5,6,7,8,9 };
// ArrayList 不實現 ICollection → 不可用
var list = new List();
list.Add(0); list.Add(1); ... list.Add(9);
隱式類型聲明的核心價值不在簡化基本類型聲明,而在於為匿名類型提供唯一可行的聲明語法。匿名類型無名稱,只能通過 var 接收編譯器生成的內部類型實例。
隱式類型數組延續 var 推斷邏輯,對象/集合初始化器將構造與賦值合一,兩者雙雙服務於匿名類型的聲明與初始化。這套組合拳將 C# 從命令式「逐步構建」推向聲明式「描述結果」,為函數式風格的 LINQ 奠定語法基石。