我見過很多關於匿名類型如何工作的描述,但我不確定它們的真正用處。在一個設計良好的程序中,匿名類型可用於解決什麼情況?如何在C#中使用匿名類型?
15
A
回答
18
匿名類型無關使用新系統的設計甚至在課堂上都是如此。它們是開發人員在編碼時使用的工具。
我甚至不把匿名類型視爲類型本身。我主要將它們用作方法級匿名元組。如果我查詢數據庫然後處理結果,我寧願創建一個匿名類型並使用它,而不是聲明一個全新的類型,這個類型在我的方法範圍之外永遠不會被使用或知道。
例如:
無人問津`一,匿名類型。它在那裏,所以你不必申報另一個班級。
1
當您爲「使用和拋出」目的創建類型時。 這似乎是由於LINQ引起的。似乎是一種爲LINQ查詢創建帶有字段的結構的方法。僅返回指定字段的結構/類型。如果不是這樣,你必須爲每個你希望檢索的字段的唯一組合聲明一個.Net類型。
8
從LINQ在行動(第76頁第2.6.3節):
...匿名類型[是]進行快速和簡單的臨時結果一個偉大的工具。由於臨時類型,我們不需要聲明類來保存臨時結果。
基本上它們有助於暫時將信息保存在本地作用域中。任何更多需要使用反射,並可能成爲一個相當大的問題。他們在上面引用的書中給出的例子是以書面形式來控制每個正在運行的進程佔用的內存的ID,名稱和數量。他們創建一個匿名類型,將其添加到列表(全部一條語句),然後使用ObjectDumper輸出它。因此,代碼不再需要另行申報類來保存ID,名稱和內存使用,但它的所有聲明的隱含使線倒數至4:
var pl = new List<Object>();
foreach(var p in Process.GetProcesses())
pl.Add(new {p.Id, p.ProcessName, Memory=p.WorkingSet64});
ObjectDumper.Write(pl);
2
將它們與Linq一起使用。
2
匿名類型最受歡迎的用途是用於指定LINQ to SQL查詢中的投影。
這個查詢
from x in db.Table1 select new {x.Column1, Alias2=x.Column2}
將被轉換爲這個SQL:
SELECT Column1, Column2 AS Alias2 FROM Table1
使用匿名類型,你可以不事先定義它的類型創建即席預測。編譯器將爲您定義類型。
0
重要的是要知道,LINQ並不強迫你使用匿名類型。選擇後,您也可以編寫普通的對象結構。
var query = from item in database.Items
// ...
select new Person(item.id, item.Name)
這可以防止你從醜陋的反射編程。
-1
@Wouter:
var query = from item in database.Items
select new Person
{
ID =item.id,
NAME= item.Name
};
其中ID和NAME是你的Person類的不動產。
相關問題
- 1. C#匿名類型
- 2. 在匿名類型中使用變量
- 3. 在C中返回匿名類型#
- 4. C#匿名類型聲明
- 5. 匿名類型的C#List.Foreach
- 6. 匿名c類型的C++別名
- 7. 如何使用匿名類
- 8. 如何使用匿名類型(C#)聲明字段
- 9. C# - 如何使用Dotfuscator.Net的匿名類型?
- 10. 非局部變量在C++中使用匿名類型警告
- 11. 如何在Scala中使用類型參數聲明匿名mixin
- 12. 如何使用TypeScript在linq查詢中創建匿名類型
- 13. 匿名類型
- 14. 匿名類型
- 15. 如何在C中增加匿名類型對象#
- 16. 如何在C#中訪問匿名類型的屬性?
- 17. 清單匿名類型在C#
- 18. 什麼是C#中的匿名類型?
- 19. 如何在C#中使用接口創建匿名類
- 20. 除了LINQ查詢之外,您如何在C#中使用匿名類型?
- 21. C#3.0匿名類型:命名
- 22. 多態,泛型和匿名類型C#
- 23. LINQ中,VB - 匿名類型不能轉換爲匿名類型
- 24. 在Scala中的匿名類中使用類型參數
- 25. 使用{...}與新實例化C#中的匿名類型
- 26. 如何使用匿名泛型委託在C#2.0
- 27. 如何使用匿名方法或匿名類型來減少此代碼?
- 28. LINQ中的匿名類型
- 29. 從匿名類型
- 30. 匿名類型IQueryable
你是否需要這個。當然,如果你在你的方法中做了太多的工作以保證匿名類型,那麼你應該重構該方法。在你的例子中,你查詢數據庫,然後修改結果,..這是我2個不同的方法。 – Stimul8d 2010-09-10 10:29:37
我沒有修改結果,我將它們轉換爲其他更容易返回的表單。 一個人應該注意不要在多個方法中過度分配他們的代碼,因爲這會使代碼完全無法讀取並創建,因爲無法使用匿名類型,很多難看的代碼或冗餘的手動編碼類型。 – 2010-09-16 19:08:59