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

C# 3.0 新特性:物件與集合初始化器語法糖完整解析

     編輯:關於C#

物件初始化器與集合初始化器讓建構物件與填充集合更宣告式、簡潔,是 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;
  • 要求型別有**無參數建構函式** (public 或可存取)。
  • 屬性/欄位必須可寫入。
  • 可巢狀初始化巢狀物件: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} }。

Release 模式優化

Debug 模式保留暫存變數 (<>g__initLocal0) 方便除錯;Release 模式內聯優化,直接在目標變數上操作,零額外分配。

適用性與限制

  • 不可變型別:若屬性唯讀 (get; private set; / init / 唯讀欄位) 無法使用初始化器 (C# 9.0 init 存取子解決此問題)。
  • 建構函式邏輯:若建構函式包含必要驗證/初始化邏輯,初始化器會繞過,需權衡。
  • 例外處理:初始化器中拋出例外,物件可能處於半初始化狀態,但無參考洩漏 (編譯器使用暫存變數)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved