var a = new[] { 1, 10, 100 }; // int[]
var b = new[] { 1, 1.5, 2.0 }; // double[]
var c = new[] { "hello", null }; // string[]
關鍵差異:省略型別名稱,僅保留 new[],由編譯器根據元素推斷陣列元素型別。
T,使其他所有型別皆可隱含轉換至 TT 不可為 null 型別| 初始化器 | 推斷結果 | 說明 |
|---|---|---|
{1, 10, 100} | int[] | 所有元素為 int |
{1, 1.5, 2} | double[] | int 隱含轉換 double |
{"hello", null} | string[] | null 可轉換至任何參考型別 |
{1, "one"} | ❌ 錯誤 | int/string 無隱含轉換關係 |
{null} | ❌ 錯誤 | 唯一元素為 null 型別 |
object[] arr = new object[] { 1, "one" };new[] { 1.0, 2.0, 3.0 } 強制 doublenew[] { (Animal)new Dog(), (Animal)new Cat() }var contacts = new[] {
new {
Name = "Chris Smith",
Phones = new[] { "206-555-0101", "425-882-8080" }
},
new {
Name = "Bob Harris",
Phones = new[] { "650-555-0199" }
}
};
// contacts 型別:匿名型別[],每個元素擁有 Name (string) 與 Phones (string[])
此模式極適合:
var)隱含型別陣列是 C# 型別推斷系統在集合字面值上的自然延伸,配合匿名型別,讓 C# 具備動態語言般的資料字面表達力,同時保持靜態型別安全。