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

C# 3.0 新特性深度解析(二):物件與集合初始化器完整指南

     編輯:關於C#

C# 3.0 引入的物件初始化器與集合初始化器,讓物件建立與集合填充更加直觀簡潔。本文詳細說明語法規則、巢狀初始化、匿名類型搭配與編譯器轉換機制。

自動屬性回顧

public int Dne { get; set; } // C# 3.0 自動屬性

物件初始化器

傳統建構函數多載方式:


MyClass c = new MyClass(); c.Name = "yy"; c.Number = "1111";
MyClass d = new MyClass("1111"); d.Name = "yy";
MyClass e = new MyClass("1111", "yy");

物件初始化器一行搞定:

MyClass n = new MyClass { Name = "yy", Number = "1111" };

巢狀物件初始化


MyClass nest = new MyClass {
    Name = "yy",
    Number = "1111",
    OClassMember = new OClass { Addr = "neijiang", Zip = "404045" }
};

注意事項

  • 屬性賦值用逗號分隔,結尾加分號
  • 類別必須提供無參數建構函數
  • 屬性賦值順序可任意交換

集合初始化器

實作 ICollection<T> 的類別支援:


List<int> digits = new List<int> { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
List<int> digits2 = new List<int> { 0 + 1, 12 % 3, GetIntNumber() };
List<MyClass> customers = new List<MyClass> {
    new MyClass { Number = "1111", Name = "yy" },
    new MyClass { Number = "2222", Name = "qq" },
    new MyClass { Number = "3333", Name = "qiqi" }
};

編譯器自動展開為 Add 方法呼叫。允許 null 元素(若集合許可)。

匿名類型搭配初始化器

LINQ 查詢投影常用:


var vaobj = from obj in objset select new { obj.Name, obj.Number };
var varobj = from vobj in objset select new { vobj.Name, ID = vobj.Number };

匿名類型屬性名稱預設同來源屬性,可用 別名 = 來源 重新命名。

語法本質

初始化器純屬語法糖,編譯器編譯時隱式呼叫建構函數並逐一賦值,無執行期額外負擔。

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