var i = 5; // int
var s = "hello"; // string
var d = 1.5; // double
// IL 元數據中已嵌入確切類型
var x; ❌)
var ia = new[] { 1, 2, 3, 4, 5 }; // int[]
var da = new[] { 1.1, 2, 3, 4, 5 }; // double[](整數隱式轉 double)
var sa = new[] { "Hello", "World" }; // string[]
// 類型不兼容失敗
var aa = new[] { 1, "Hello", 2.0 }; // ❌ No array type can be inferred
規則:元素列表必須存在「最佳通用類型」,其他元素隱式可轉換至該類型。
var book = new Book
{
Name = "First",
Isbn = "1-111",
Price = 88.0f
};
// 屬性順序任意、可部分賦值、可留空(默認值)
var book = new Book();
book.Name = "First";
book.Isbn = "1-111";
book.Price = 88.0f;
var list = new List { 1, 2, 3, 4, 5 };
// 編譯器生成循環調用 list.Add(...)
要求:實現 ICollection<T>、明確泛型參數 T、元素隱式轉換至 T。
臨時聚合相關數據(如查詢投影),無需寫「樣本代碼」(私有字段+屬性+構造函數)。
var b1 = new { Name = "Book1", Price = 88.0f };
var b2 = new { Price = 25.0f, Name = "Book2" }; // 順序不同 → 不同類型
var b3 = new { Name = "Book3", Price = 35.0f }; // 與 b1 同類型
b1 = b3 ✅,b1 = b2 ❌)
Console.WriteLine(b1.GetType());
// 輸出:Namespace.Program+f__0(包含特殊字符,源碼不可訪問)
這四大特性(var、隱式數組、初始化器、匿名類型)層層遞進:var 為匿名類型提供聲明載體,初始化器為匿名類型提供賦值語法,隱式數組為匿名類型數組提供聲明方式。它們共同為 Lambda 表達式與 LINQ 查詢表達式奠定了語法基礎。