C# 匿名類別

匿名類別(Anonymous types)是一種暫存型的資料型別,不需要額外建立類別就可以存放不同類型的資料
  • 需要使用 var 宣告
  • 屬性是公開的(public)
  • 屬性是唯獨的,建立後不能修改
在使用 LINQ 時很常使用到匿名類別,可以將查詢結果暫時儲存至匿名類別中,供後續處理

假設我們有個 User 類別
    
    public class User
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
    }
    

我們想要把 users 這個清單的資料依照年紀篩選,只要 18 歳以上的、依照 Id 排序。我們只需要 Name 和 Age 欄位,我們就可以使用匿名類別,將資料暫存,供後續使用。
    
var users = new List<User>
{
    new User { Id = 1, Name = "Ruyut", Age = 20 },
    new User { Id = 2, Name = "小明", Age = 19 },
    new User { Id = 3, Name = "大頭", Age = 18 },
    new User { Id = 4, Name = "老王", Age = 17 },
};

var result = users
    .Where(x => x.Age >= 18)
    .OrderBy(x => x.Id)
    .Select(x => new { x.Name, x.Age })
    .ToList();

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


// Name: Ruyut, Age: 20
// Name: 小明, Age: 19
// Name: 大頭, Age: 18
    

匿名類型和我們上次提到的 C# record(紀錄) 一樣,都有針對屬性顯示最佳化的 ToString 方法,會輸出方便查看屬性的格式
    
var data = new { Id = 1, Name = "Ruyut" };
Console.WriteLine($"data: {data}"); // data: { Id = 1, Name = Ruyut }
    



參考資料:
Microsoft.Learn - Anonymous types
Microsoft.Learn - Choosing between anonymous and tuple types

留言

張貼留言

如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com