遷移到.NET 2.0+之後,有沒有理由繼續使用systems.Collections命名空間(除了維護遺留代碼)呢?泛型名稱空間是否應該始終使用?泛型和System.Collections
8
A
回答
12
大多數情況下,泛型集合的執行速度會比非泛型集合的速度快,併爲您提供強類型集合的好處。在比較System.Collections中和System.Collections.Generic可用的集合,你會得到下面的「移民」:
Non-Generic Generic Equivalent ------------------------------------------------------------ ArrayList List<T> BitArray N/A CaseInsensitiveComparer N/A CollectionBase Collection<T> Comparer Comparer<T> DictionaryBase Dictionary<TKey,TValue> Hashtable Dictionary<TKey,TValue> Queue Queue<T> ReadOnlyCollectionBase ReadOnlyCollection<T> SortedList SortedList<TKey,TValue> Stack Stack<T> DictionaryEntry KeyValuePair<TKey,TValue> ICollection N/A (use IEnumerable<T> or anything that extends it) IComparer IComparer<T> IDictionary IDictionary<TKey,TValue> IEnumerable IEnumerable<T> IEnumerator IEnumerator<T> IEqualityComparer IEqualityComparer<T> IList IList<T>
ICollection的是不變的(沒有成員來更改集合的內容),而ICollection的<牛逼>是可變的。這使得名稱相似的接口僅在ICollection和IEnumerable <T>相差很小。
從這個列表中,唯一沒有泛型類的非泛型類是BitArray和CaseInsensitiveComparer。
0
在某些情況下,通用容器的性能比舊的要好。在任何情況下,他們至少應該表現得和舊錶現一樣。他們幫助捕捉編程錯誤。這是一個更有用的抽象和更好的性能的罕見組合,所以沒有太多的理由來避免它們。只有當你被一個蹩腳的圖書館強迫時,你必須使用那些在泛型之前編寫的圖書館。
0
我看到了一個來自C#團隊的Anders Hejlsberg的採訪,他被問到是否有任何他對以前版本的.net感到遺憾。在asp.net 1.0中沒有泛型是他提到的第一件事。沒有它意味着他們不得不實施解決方案,這些解決方案將堅持使用.net庫,並很快成爲遺留代碼。
我從來沒有使用System.Collections命名空間,並從他的聲明這似乎是正確的路徑。
0
關於唯一不好的就是我能想到使用泛型的時候是方差,因此,例如,如果你有一個List<Person>
,你想它傳遞給需要List<object>
你不能因爲List<Person>
不能轉換的方法直接使用List<object>
。
此問題已在.NET 4.0中解決。
相關問題
- 1. 鑄造泛型和泛型類型
- 2. 在System.Collections中找不到ArrayList類型
- 3. JavaFX和泛型
- 4. Java和泛型?
- 5. 泛型和Class.asSubclass
- 6. 泛型和TreeSets
- 7. 廠和泛型
- 8. Java泛型和「...」
- 9. 泛型和ArrayList
- 10. ThreadLocal和泛型
- 11. GWT和泛型
- 12. JRuby和泛型
- 13. IEnumerator和泛型
- 14. DVM和泛型?
- 15. java.lang.Class和泛型
- 16. Scala和泛型
- 17. Hibernate和泛型
- 18. Java泛型類和非泛型類
- 19. System.Collections.Generic vs System.Collections?
- 20. System.Collections VS System.Collections.ObjectModel
- 21. 匿名類型和泛型
- 22. 泛型和類型推斷
- 23. Java的泛型和類型
- 24. 反射和泛型類型
- 25. 泛型類型和繼承
- 26. 泛型和子類型
- 27. 泛型和可空類型
- 28. F#和泛型類型
- 29. 繼承和泛型類型
- 30. 泛型和超類型
KeyedCollection是DictionaryBase的合適替代品,具體取決於您要存儲的數據。 –
2009-06-09 21:25:00