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

C# 3.0匿名類型核心特性詳解(二):定義語法、類型推斷、只讀屬性、LINQ投影實戰

     編輯:關於C語言

匿名類型定義與類型推斷


var noname = new { Name = "yyao", Age = 24 }; // 編譯器推斷出包含 Name(string)、Age(int) 的類型

關鍵點**:

  • 類型名由編譯器生成,源代碼不可見。
  • 屬性類型由初始化表達式靜態推斷**。
  • 屬性為公共只讀**,無法添加方法/事件。

類型兼容性演示


var a = new { NameA = "yyao", Age = 24 };
var b = new { NameA = "self", Age = 25 };
var c = new { UserName = "self", Age = 25 }; // 屬性名不同 → 不同類型

b = a; // ✓ 同類型賦值合法
c = b; // ✗ 編譯錯誤:無法從 AnonymousType#1 隱式轉換為 AnonymousType#2

常見錯誤與限制

  • 不可用null初始化屬性**:new { Prop = null } 編譯報錯(無法推斷類型)。
  • 屬性只讀**:obj.Age = 26 編譯報錯。
  • 必須配合var**:無具體類型名可寫,編譯器通過var訪問匿名類型變量。

LINQ投影典型用法


MyClass[] objSet = new MyClass[12];
// 從現有對象選取部分屬性構建匿名類型
var result = from obj in objSet select new { obj.Name, obj.Number };

foreach (var item in result)
    Console.WriteLine($"Name={item.Name}, Number={item.Number}");

優勢:MyClass可有更多屬性,投影僅攜帶所需數據,減少序列化/傳輸開銷。

總結

匿名類型提供輕量級、強類型、值語義**的臨時數據載體,專為LINQ查詢表達式設計。掌握其定義語法、類型推斷規則、只讀特性與作用域限制,是高效使用C# 3.0+功能的基礎。

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