首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 3.0 集合初始化器:語法、巢狀結構與編譯器降級原理

     編輯:關於C語言

前言

集合初始化器讓集合建立與元素添加合而為一,語法簡潔如列舉初始化。本文解析語法規則、巢狀初始化、編譯器轉換為 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>

類別必須實作 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 呼叫,零效能損耗。善用巢狀初始化可大幅減少測試資料建構、設定物件建立的樣板程式碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved