var classes = new List
{
new MyClass
{
NameOfClass = "Science",
StudentNames = { "Laura", "George" }
},
new MyClass
{
NameOfClass = "Commerce",
StudentNames = { "Bill", "Hillary" }
}
};
var classes = new List();
var c1 = new MyClass();
c1.NameOfClass = "Science";
c1.StudentNames.Add("Laura");
c1.StudentNames.Add("George");
classes.Add(c1);
var c2 = new MyClass();
c2.NameOfClass = "Commerce";
c2.StudentNames.Add("Bill");
c2.StudentNames.Add("Hillary");
classes.Add(c2);
IL_0002: newobj List::.ctor()
IL_0007: stloc.1 // 臨時列表
IL_000a: newobj MyClass::.ctor() // c1
IL_000f: stloc.2
IL_0010: ldloc.2
IL_0011: ldstr "Science"
IL_0016: stfld MyClass::NameOfClass
IL_001b: ldloc.2
IL_001c: ldfld MyClass::StudentNames
IL_0022: ldstr "Laura"
IL_0027: callvirt List::Add
... 後續同理:Add George, Add c1, 然後 c2 同樣流程
IL 明確展示:編譯器生成精確的構造、賦值、Add 調用序列,無任何魔法運行期機制。
ICollection<T>Add 調用集合初始化器將「創建 + 循環 Add」壓縮為聲明式單表達式。編譯器負責展開,運行期零開銷。ILDASM 驗證確認生成代碼與手寫等價。此特性配合對象初始化器、var、匿名類型,構成 C# 3.0 聲明式數據構建的完整拼圖,為 LINQ 查詢結果投影提供語法支撐。