var book = new { Name = "C#", Price = 100 };
var bookA = new { Name = "C# 3.0", Price = 80 };
// 同結構 → 同類型
book = bookA; // ✅ 合法
class BookAsGood { public string Name { get; set; } public decimal Price { get; set; } }
var b = new BookAsGood { Name = "Test", Price = 99 };
var anon = new { b.Name, b.Price }; // 屬性名自動投射
book.Name = "New"; // ❌ 編譯錯誤:屬性只讀,無 setter
// 匿名類型屬性僅有 get,構造後不可變
object,失去強類型| 概念 | 定義 | 示例 |
|---|---|---|
| 隱式類型變量 | 根據右側表達式推斷左側變量類型 | var name = "C#" → string |
| 匿名變量 | 根據初始化器推導出類型結構並創建實例 | var book = new { Name="C#", Price=100 } |
| 協同關係 | 匿名類型初始化器中的屬性賦值本身即隱式類型變量 | Name="C#" 推斷 string,Price=100 推斷 int |
匿名類型提供聲明即定義、構造即賦值、只讀不可變、結構決定類型身份的輕量數據載體。理解其與隱式類型變量的協同關係、只讀本質、跨邊界限制,是正確應用於 LINQ 投影、臨時聚合、測試構建等場景的關鍵。