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

C# 3.0對象/集合初始化器詳解(三):匿名類型投影、集合初始化器與總結

     編輯:關於C語言

對象初始化器用於匿名類型投影

LINQ查詢中頻繁使用:


MyClass[] objSet = new MyClass[12];
// 直接投影現有屬性,屬性名保留
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 };

優勢:無需MyClass提供無參構造函數,因構造的是新匿名類型而非MyClass實例。

集合初始化器語法

編譯器自動展開為Add方法調用序列:


public void SetInit()
{
    // 簡單值
    List digits = new List { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    
    // 表達式
    List digits2 = new List { 0 + 1, 12 % 3, GetIntNumber() };
    
    // 對象初始化器嵌套
    List customers = new List
    {
        new MyClass { Number = "1111", Name = "yy" },
        new MyClass { Number = "2222", Name = "QQ" },
        new MyClass { Number = "3333", Name = "qiqi" }
    };
}

public int GetIntNumber() => 56;

集合初始化器進階規則

  • 目標類型必須實現ICollection<T>並具體化T。
  • 元素可為值、表達式、對象初始化器**任意組合。
  • 支持null元素(若Add允許):new List { ..., null };
  • 語法結尾:花括號後接分號,元素間逗號分隔。

本質與總結

初始化器本質是編譯器語法糖,編譯後等價於顯式new+多次Add/屬性賦值。優勢在於:

  1. 聲明式風格,代碼更接近數據結構直觀表達。
  2. 減少臨時變量與重複調用,降低拼寫錯誤風險。
  3. 編譯器保證初始化順序與異常安全(部分初始化失敗不會留下半初始化對象)。

雖非必需特性,但熟練掌握能顯著提升代碼編寫效率與可讀性。

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