承上篇,我們繼續深入剖析集合初始化器的運作細節。核心概念很簡單:
編譯器會呼叫對應類別的建構函式建立一個暫存物件,然後設定屬性,最後加入集合。
List<Staff> myListOfStaff = new List<Staff>
{
new Staff { Name = "GUOJUN", Age = 27 },
new Staff { Name = "IORI", Age = 27 },
new Staff(12, "sss") { Name = "GUOJUN" }
};
foreach (Staff pt in myListOfStaff)
{
Console.WriteLine(pt);
}
透過反編譯觀察,集合初始化器的實現本質與物件初始化器如出一轍:
List<Staff> <>g__initLocal6 = new List<Staff>();
Staff <>g__initLocal7 = new Staff();
<>g__initLocal7.Name = "GUOJUN";
<>g__initLocal7.Age = 0x1b; // 27
<>g__initLocal6.Add(<>g__initLocal7);
Staff <>g__initLocal8 = new Staff();
<>g__initLocal8.Name = "IORI";
<>g__initLocal8.Age = 0x1b;
<>g__initLocal6.Add(<>g__initLocal8);
Staff <>g__initLocal9 = new Staff(12, "sss");
<>g__initLocal9.Name = "GUOJUN";
<>g__initLocal6.Add(<>g__initLocal9);
List<Staff> myListOfStaff = <>g__initLocal6;
foreach (Staff pt in myListOfStaff)
{
Console.WriteLine(pt);
}
<>g__initLocalX)來持有中間物件。Add 方法加入集合。理解這層機制,有助於在除錯或效能分析時看懂生成的中間碼。