2013-08-22 19 views
1

我意識到如果你運行的是.NET 1.1,那麼泛型不可用。但是,如果您使用的是.NET 2.0+,那麼使用ArrayList類比List<object>有什麼優勢?有沒有使用ArrayList類的任何一點?

基本上,只要你申報的類型爲 TSystem.Object,那麼爲什麼不用List<T>類呢?

+0

優點是'你不必鍵入< and >',缺點是'它似乎很快過時或更高版本# –

+3

除了與.NET 1.1代碼交互之外,沒有任何理由。 –

+4

@KingKing真的嗎?這是你找到的優勢? ...? –

回答

3

我同意丹尼爾。

此外,還有一些微軟在MSDN上的具體性能信息,比較List<T>ArrayList值得一讀。

http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx

在決定是否使用List或ArrayList類,兩者的 有相似的功能,記住List類 執行在大多數情況下更好,是類型安全的。如果引用類型是 用於List類的T類型,那麼兩個類 的行爲是相同的。但是,如果對於類型T使用值類型,則需要考慮實現和裝箱問題 。

如果值類型用於類型T,則編譯器會專門爲該值類型生成List類的 實現。 這意味着一個列表對象的列表元素不一定是 在可以使用該元素之前裝箱,並且在創建大約500個列表之後 元素被創建的情況下,保存的不是裝箱列表元素的內存是 大於用於生成類實現。

確保用於類型T的值類型實現了IEquatable通用接口 。如果不是,則諸如Contains之類的方法必須調用Object.Equals(Object)方法,該方法將受影響的列表 元素框。如果值類型實現了IComparable接口並且您擁有源代碼,那麼還應實現IComparable通用接口,以阻止BinarySearch和Sort方法從列表元素中刪除 列表元素。如果你沒有自己的源代碼,通過一個IComparer的 對象到二分查找和排序方法

這是你的優勢,使用,而不是使用ArrayList類或寫入的 List類的特定類型的實現 你自己強類型包裝收集。原因是您的實施必須執行.NET Framework爲您所做的工作, 和公共語言運行庫可以共享Microsoft中間代碼 語言代碼和元數據,而您的實現不能。

4

我不會將它用於任何新的東西,並且我將它從現有的代碼中分解出來,以方便實現。 List消除了許多不必要的類型轉換,提高了性能,同時減少了運行時錯誤的可能性。現在也很流行,大多數擴展方法和庫都是爲它而構建的,而不是ArrayList,即使它在技術上與ArrayList相同,但它不是更好的選擇。

除了舊的遺留代碼,我不認爲如果它完全從圖書館中消失,.NET就會受到影響。

0

列表是一個更好的選項,其中型鑄造成爲複雜的應用程序一個更大的問題

相關問題