只有累積,沒有奇蹟

2018年11月10日 星期六

[C#] Anonymous Type 匿名型別

說明
Anonymous Type 是甚麼?
匿名型別是C# 3.0開始有的特性,是一種暫存型的型別不需要建立額外的類別來存放資料
根據MSDN對於 匿名型別 的說明如下








根據MSDN的說明
整理一下重點及特性
1. 透過 new 建立實體 
  1. // Anonymous Typevar employee = new { Id = 1, Name = "Marcus", Age = 22 } ;
要使用時透過 匿名物件初始設定(anonymous object initializer) 來建立實體不需要先定義employee物件的prop或是屬性
2. 不需要事先明確定義屬性型別





型別名稱會由編譯器產生,我們可以透過物件的object.GetType()方法來取得物件的型別名稱
以上述的例子,將滑鼠移到var上會發現產生的型別名稱為 f__Anonymous0'3

3. 唯讀屬性 






公開且唯讀的屬性(Immutable types)
,屬性設定初始值後,無法再修改

4. 屬性類型由編譯器推斷






在建立匿名型別物件時,其屬性類型會由編譯器自動推斷
以上述的例子,employee.Name與Age在建立時並未定義屬性類型
建立後滑鼠移上去即可發現類型已經自動指定為初始值屬性值類型
Name => String , Age => int

使用場景

匿名型別帶來很多方便的地方有時需要一個簡單的類別來儲存一些簡單的資料但又不想為了簡單的需求另外定義一個類別(沒其他地方用到),這時就可以使用C#的匿名型別,或是資料來源是兩個不同物件或類別,現在需要取得個別的其中一個屬性來做回傳,這時也可以使用匿名型別來產生新的載體,ex 使用LINQ使用進行JOIN後最後Select new 某某屬性減少貧血類別的數量

參考

Huan-Lin 學習筆記: C# 筆記:匿名型別


Related Posts:

  • [NET] 如何在 NLog 進行偵錯發生情境 NLog 是在.NET 開發者中很受歡迎的 Open Source,支援 .NET Framework 和 .NET Core,安裝上可以很簡單的透過 Nuget 安裝下載使用,透過 NLog 定義的 Configure 定義專案自行紀錄/輸出的 Log Level 格式 ,近同事反應在開發新專案使用上遇到離奇的事情,在使用 NLog 寫錯誤訊息時沒有辦法正常寫入到檔案中,NLog 在遇到問題時預設是不會 throw exce… Read More
  • [Windows] 註冊 Windows Service 服務前言 最近專案有個需求要將排程透過 Windows Service 服務來執行,在 Windows OS 要註冊 Service 可以用  cmd  與  powershell  兩種方式來建立以及刪除 Service,兩種方式之前都有使用過但要再使用時都會上網查因此決定紀錄一下未來方便查詢,此篇就針對這兩種方式進行基本介紹與說明,若有問題歡迎提出一起討論或是給予指導… Read More
  • [NET] 使用 MethodBase.GetCurrentMethod 取得執行方法資訊前言  在過去 method 發生例外用 catch 包起來時,往往 catch 寫的 logName 都是 hard Code 寫死 method Name,但常常會發生 copy 來 copy 去的時候忘記改寫死的 method name 造成 log 寫錯誤狀況發生,之前使用 C# 4.5 提供的 CallerMemberName attribute 解決此問題,簡單範例如下 private void… Read More
  • [conference] COSCUP 2024 - 探索 OpenTelemetry Auto-Instrumentation 在 .NET 的核心技術 分享心得 OpenTelemetry 是 Github 開源專案中除了 K8S 外第二名的專案,也是在討論可觀測性時收集遙測數據標準工具,但在工具背後到底怎麼實踐的呢 ? 這邊就透過自己的小研究來分享核心奧妙之處,希望可以幫助到有幸的開發夥伴們 :) 議程介紹 主題 : 探索 OpenTelemetry Auto-Instrumentation 在 .NET 的核心技術 在這場分享中,我們將深入探索 … Read More
  • [NET] Task.WhenEach 等待多個任務的更靈活方式前言 在過去如果要使用多個 Task 在 Dotnet 中可以使用 Task.WaitAll 和 Task.WhenAll 兩個內建的 API,其使用的差異之前也有撰寫文章 [NET] Task 等待多個任務 - Task.WaitAll 與 Task.WhenAll,這兩個方法都會等到所有任務完成後再繼續執行。如果當需求是完成一個就先進行處理,而不是全部完成後該怎麼辦呢 ? 這時就可以使用 Task.WhenEach 方法,來達到你所要的目… Read More

0 意見:

張貼留言

Copyright © 2025 m@rcus 學習筆記 | Powered by Blogger

Design by Anders Noren | Blogger Theme by NewBloggerThemes.com