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

C# 3.0 對象與集合初始化器:告別樣板代碼的優雅賦值方式

     編輯:關於C語言

對象初始化器:聲明即賦值,一氣呵成

傳統兩步走模式


var emp = new Employee();
emp.Id = 1;
emp.Name = "藍之風";
emp.Age = 24;
emp.BirthDate = "1984-10-21";
emp.Sex = "男";

C# 3.0 對象初始化器


var emp = new Employee 
{ 
    Id = 1, 
    Name = "藍之風", 
    Age = 24, 
    BirthDate = "1984-10-21", 
    Sex = "男" 
};

優勢:單語句完成構造與賦值、屬性順序任意、可選賦值部分屬性、支持巢狀初始化。

編譯器翻譯等價代碼


// 編譯器生成
var emp = new Employee();
emp.Id = 1;
emp.Name = "藍之風";
// ... 其餘屬性賦值

本質是編譯器幫你寫樣板代碼,無運行期開銷。

集合初始化器:用數組語法初始化任意集合

語法要求

  • 目標類型實現 ICollection<T>
  • 元素類型隱式可轉換為 T
  • 編譯器生成循環調用 Add 方法

示例


// List
var numbers = new List { 1, 2, 3, 4, 5 };

// 巢狀對象初始化
var classes = new List
{
    new ClassRoom 
    { 
        Name = "Science", 
        Students = new List { "Laura", "George" } 
    },
    new ClassRoom 
    { 
        Name = "Commerce", 
        Students = new List { "Bill", "Hillary" } 
    }
};

編譯器生成等價代碼


var classes = new List();
var c1 = new ClassRoom { Name = "Science" };
c1.Students.Add("Laura");
c1.Students.Add("George");
classes.Add(c1);
// ... 同理 c2

限制與注意

  • 不實現 ICollection<T> 的類型(如 ArrayList)不可用
  • 必須明確指定泛型參數 T
  • 僅調用 Add 方法,不支持 AddRange 等批量操作

總結

對象/集合初始化器將「構造 + 多行賦值」壓縮為「聲明式單表達式」,編譯器負責展開,代碼可讀性質變。配合 var、匿名類型、擴展方法,構成 C# 3.0 聲明式編程風格的基石,為 LINQ 查詢表達式鋪平道路。

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