2008-12-24 53 views
44

我看到喬恩在Initialize generic object with unknown type這個答覆:的ArrayList VS列表<object>

如果你想有一個單一的集合 包含多個不相關類型 值的,但是,你將不得不使用 List<object>

我並沒有比較ArrayListList<>,但是ArrayListList<object>,因爲兩者都會暴露類型的元素10。在這種情況下使用其中一種會有什麼好處?

編輯:這裏沒有關注類型安全,因爲這兩個類都暴露了object作爲它的項目。仍然需要從object投射到所需的類型。除了類型安全以外,我更感興趣。

編輯:謝謝Marc Gravell和肖恩的答案。對不起,我只能選擇1作爲答案,所以我會投兩個。

回答

69

您可以直接與List<object>使用LINQ擴展方法,但不能與ArrayList,除非你(VS IEnumerable感謝IEnumerable<object>)注入Cast<object>()/OfType<object>。即使你不需要類型安全等,這也是值得的。

速度大致相同;結構仍然會被裝箱等 - 所以沒有什麼別的可以將它們分開。除了我傾向於將ArrayList視爲「oops,有人正在編寫遺留代碼...」;-p

-4

列表<>是ArrayList的類型安全版本。它將確保您將在集合中獲得相同的對象類型。

+1

很顯然,我不是指類型安全在這裏 – faulty 2008-12-24 09:47:13

5

是的,除了類型安全外,泛型集合實際上可能更快。

從MSDN(http://msdn.microsoft.com/en-us/library/system.collections.generic.aspx

System.Collections.Generic 命名空間包含接口和定義一般 集合,它允許用戶創建 強類型集合是 提供更好的 類類型安全和 表現比非通用強烈 類型集合。

+2

`名單`不會給你太多的改進在使用這些改進的`ArrayList`大多數鍵入安全和性能的方式是針對`名單 `T是除了'object`之外的任何東西。 – Brian 2011-02-10 21:15:08

38

使用List<object>的一大好處是,現在大部分代碼都是使用泛型類/接口編寫的。我懷疑現在大多數人會寫一種採用IList<object>而不是IList的方法。由於ArrayList未實現IList<object>,因此您將無法在這些場景中使用數組列表。

我傾向於將非泛型類/接口想象爲遺留代碼,並儘可能避免它們。

+0

這是一個我沒有想到的角度,很好的捕捉。 – 2008-12-24 10:18:18

11

在這種情況下,ArrayListList<Object>然後你不會注意到速度上的任何差異。實際可用的方法在.NET 3.5和計數擴展方法上可能存在一些差異,但這與ArrayList在某種程度上被棄用有關。

1

做一些基準測試,您將知道哪些性能最好。我很抱歉,差別非常小。

+0

其實我不知道這個問題是關於性能的,但這是一個很好的觀點。我的猜測是arraylist perf會因爲額外的拳擊,拆箱而變得更糟。 – 2010-10-08 00:56:20

相關問題