匿名類型和元組有什麼區別?匿名類型和元組
Q
匿名類型和元組
22
A
回答
14
匿名類型具有帶有更多信息的屬性名稱,對於不具有此屬性的元組。你不能使用匿名類型作爲返回值和參數,而你可以使用元組。
元組好時的例子是當你想返回多個值時。 @Petar Minchev mentions this link這是一個很好的例子。
您可能需要一個返回索引和值的Find()
方法。另一個例子是在2D或3D平面上的位置。
18
元組不是匿名類型,它是一個命名類型。您可以將其用作返回類型或方法參數。此代碼是有效的:
Tuple<int, string> GetTuple()
{
return Tuple.Create(1, "Bob");
}
你不能用匿名類型做到這一點,你就必須返回System.Object
代替。通常,您最終必須對這些對象使用Reflection(或.NET 4中的dynamic
)才能獲取各個屬性的值。
而且,正如布賴恩提到,在Tuple
屬性名稱是固定的 - 他們總是Item1
,Item2
,Item3
等,而用一個匿名類型可以選擇任何名稱。如果你寫:
var x = new { ID = 1, Name = "Bob" }
然後匿名類型實際上有ID
和Name
性能。但是,如果你寫:
Tuple.Create(1, "Bob")
然後將生成的元組只是有性能Item1
和Item2
。
8
另一個有利於匿名類型的觀點是,您可以輕鬆擁有超過8個屬性。雖然這可以通過元組來實現,但它並不那麼漂亮。
var tuple = Tuple.Create(1, 2, 3, 4, 5, 6, 7, Tuple.Create(8, 9)); //and so on
或者寫自己的元組類。
一個有趣的相似性要注意的是,無論是元組和匿名類型給你不變性以及基於默認的屬性平等可比性(包括覆蓋Equals
和GetHashCode
)。
8
自從C#7出現在野外以後,對此答案進行了一些更新。元組現在擁有超能力,有時可以替換匿名類型和類。舉例來說,這個方法接受並返回具有命名屬性的元組。
void Main()
{
var result = Whatever((123, true));
Debug.Assert(result.Something == 123);
Debug.Assert(result.Another == "True");
}
(int Something, string Another) Whatever((int Neat, bool Cool) data)
{
return (data.Neat, data.Cool.ToString());
}
這很酷。
相關問題
- 1. 匿名類型和泛型
- 2. 異步和匿名類型
- 3. Linq和匿名類型
- 4. 匿名類型
- 5. 匿名類型
- 6. 匿名類型
- 7. 匿名類型
- 8. 多態,泛型和匿名類型C#
- 9. Deserialise匿名類型
- 10. 匿名類型C#
- 11. 與匿名類型
- 12. 從匿名類型
- 13. C#匿名類型
- 14. 與匿名類型
- 15. 匿名類型IQueryable
- 16. 匿名類型和LINQ和鑄造
- 17. 組合兩個匿名類型
- 18. 分組導致匿名類型
- 19. 在匿名類型上編寫分組
- 20. 對象數組的匿名類型?
- 21. LINQ中,VB - 匿名類型不能轉換爲匿名類型
- 22. 匿名類型(類功能)
- 23. 如何指定的元組類型匿名函數在Scala中
- 24. 匿名類和匿名線程
- 25. VB.NET VS C#:匿名類型和智能
- 26. SelectMany匿名類型和跳過迭代
- 27. 使用LINQ和匿名類型轉軸?
- 28. 實體框架和匿名類型
- 29. 匿名類型和多個屬性
- 30. EntityFramework。 SelectMany與匿名類型和投影
這裏是一篇文章解釋你想要什麼:http://msdn.microsoft.com/en-us/vcsharp/ee957397.aspx – 2010-04-10 15:14:47