C# 3.0 引入的物件初始化器與集合初始化器,讓物件建立與集合填充更加直觀簡潔。本文詳細說明語法規則、巢狀初始化、匿名類型搭配與編譯器轉換機制。
public int Dne { get; set; } // C# 3.0 自動屬性
傳統建構函數多載方式:
MyClass c = new MyClass(); c.Name = "yy"; c.Number = "1111";
MyClass d = new MyClass("1111"); d.Name = "yy";
MyClass e = new MyClass("1111", "yy");
物件初始化器一行搞定:
MyClass n = new MyClass { Name = "yy", Number = "1111" };
MyClass nest = new MyClass {
Name = "yy",
Number = "1111",
OClassMember = new OClass { Addr = "neijiang", Zip = "404045" }
};
實作 ICollection<T> 的類別支援:
List<int> digits = new List<int> { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
List<int> digits2 = new List<int> { 0 + 1, 12 % 3, GetIntNumber() };
List<MyClass> customers = new List<MyClass> {
new MyClass { Number = "1111", Name = "yy" },
new MyClass { Number = "2222", Name = "qq" },
new MyClass { Number = "3333", Name = "qiqi" }
};
編譯器自動展開為 Add 方法呼叫。允許 null 元素(若集合許可)。
LINQ 查詢投影常用:
var vaobj = from obj in objset select new { obj.Name, obj.Number };
var varobj = from vobj in objset select new { vobj.Name, ID = vobj.Number };
匿名類型屬性名稱預設同來源屬性,可用 別名 = 來源 重新命名。
初始化器純屬語法糖,編譯器編譯時隱式呼叫建構函數並逐一賦值,無執行期額外負擔。