物件初始化器與集合初始化器讓建構物件與填充集合更宣告式、簡潔,是 LINQ 投射、測試資料建構、DTO 映射的基礎語法糖。
public class Book
{
public string Title { get; set; }
public decimal Price { get; set; }
public string Author { get; set; }
public string Isbn { get; set; }
}
// 傳統:需多載建構函式
var b1 = new Book { Title = "Inside COM", Isbn = "123-456-789" };
// 等價編譯器產生:
// var <>g = new Book();
// <>g.Title = "Inside COM";
// <>g.Isbn = "123-456-789";
// var b1 = <>g;
new Order { Customer = new Customer { Name = "A" } }。
var books = new List
{
new Book { Title = "Inside COM", Isbn = "123-456-789", Price = 20m },
new Book { Title = "Inside C#", Isbn = "123-356-d89", Price = 100m },
new Book { Title = "LINQ", Isbn = "123-d56-d89", Price = 120m }
};
// 編譯器產生:
// var <>g = new List();
// var <>t = new Book { ... }; <>g.Add(<>t);
// ...
IEnumerable 並有 Add 方法 (單參數或多參數均可)。Dictionary 初始化:new Dictionary { [1] = "a", [2] = "b" } (索引子語法) 或 { {1, "a"}, {2, "b"} }。Add 多參數:public void Add(int x, int y) { ... } → new MyColl { {1,2}, {3,4} }。Debug 模式保留暫存變數 (<>g__initLocal0) 方便除錯;Release 模式內聯優化,直接在目標變數上操作,零額外分配。
get; private set; / init / 唯讀欄位) 無法使用初始化器 (C# 9.0 init 存取子解決此問題)。