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
new { Prop = null } 編譯報錯(無法推斷類型)。obj.Age = 26 編譯報錯。var訪問匿名類型變量。
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+功能的基礎。