集合初始化器讓集合建立與元素添加合而為一,語法簡潔如列舉初始化。本文解析語法規則、巢狀初始化、編譯器轉換為 Add 呼叫的 IL 邏輯。
// List
var keywords = new List { "while", "for", "break", "switch", "new", "if", "else" };
// Dictionary (C# 6+ 索引子初始化)
var dict = new Dictionary
{
[1] = "One",
[2] = "Two"
};
// 自訂類別支援 Add 方法
public class Point { public int X, Y; }
public class Rectangle { public Point P1, P2; }
var r1 = new Rectangle { P1 = new Point { X = 10, Y = 13 }, P2 = new Point { X = 33, Y = 66 } };
var r2 = new Rectangle { P2 = new Point { X = 13, Y = 17 } }; // P1 為 null
類別必須實作 ICollection<T>(含 Add(T) 方法)才能使用集合初始化器。自訂集合範例:
public class MyList : ICollection
{
private readonly List _inner = new();
public void Add(T item) => _inner.Add(item);
// 其他介面成員略...
}
var list = new MyList { 1, 2, 3 }; // 編譯器呼叫 Add(1), Add(2), Add(3)
// 來源
var keywords = new List { "while", "for", "break" };
// 降級後
var keywords = new List();
keywords.Add("while");
keywords.Add("for");
keywords.Add("break");
巢狀初始化同理遞歸展開:建立外層物件 → 設定屬性/欄位 → 對集合屬性呼叫 Add。
list = { x = 1 } ❌)。public List Items { get; } = new(); )。集合初始化器是 C# 3.0 最實用的語法糖之一,編譯器自動展開為標準 Add 呼叫,零效能損耗。善用巢狀初始化可大幅減少測試資料建構、設定物件建立的樣板程式碼。