何時使用泛型集合
更新:2007 年 11 月
通常建議使用泛型集合,因為可以得到型別安全的立即好處,而不需衍生自基底集合型別及實作型別特定的成員。當集合元素為實值型別時,泛型集合型別通常要比對應的非泛型集合型別有較理想的效能 (也優於衍生自非泛型基底集合型別的型別),因為有了泛型就不需要將這些元素進行 Box 處理。
下列泛型型別會對應到現有的集合型別:
Dictionary<TKey, TValue> 是對應到 Hashtable 的泛型類別。
Collection<T> 是對應到 CollectionBase 的泛型類別。Collection<T> 可用來做為基底類別,但與 CollectionBase 不同,它不是抽象的。因此使用上更為容易。
ReadOnlyCollection<T> 是對應到 ReadOnlyCollectionBase 的泛型類別。ReadOnlyCollection<T> 不是抽象的而且有建構函式,因此很容易就能公開現有的 List<T> 做為唯讀集合。
Queue<T>、Stack<T> 和 SortedList<TKey, TValue> 泛型類別會對應到各自的同名之非泛型類別。
其他型別
有幾個沒有非泛型對應項目的泛型集合型別:
LinkedList<T> 是一般用途的連結清單,可提供 O(1) 插入和移除作業。
SortedDictionary<TKey, TValue> 是排序過的字典,具有 O(log n) 個插入和擷取作業,所以是 SortedList<TKey, TValue> 的有用替代方法。
KeyedCollection<TKey, TItem> 是清單和字典二者的混合,可提供一個方法來儲存物件 (物件中包含物件的索引鍵)。
LINQ to Objects
只要物件型別實作 IEnumerable 或 IEnumerable<T>,LINQ to Objects 功能就可讓您使用 LINQ 查詢以存取記憶體中的物件。LINQ 查詢提供一般模式以存取資料,比標準的 foreach 迴圈 (Loop) 更精簡、可讀性更高,並提供篩選、排序和群組功能。LINQ 查詢也可以提升效能。如需詳細資訊,請參閱 LINQ to Objects。
其他功能
某些泛型型別的功能在非泛型集合型別中找不到。例如,對應到非泛型 ArrayList 類別的 List<T> 類別有一些方法可以接受泛型委派,例如,可讓您指定搜尋清單之方法的 Predicate<T> 委派、表示在清單的每一個元素上執行的方法之 Action<T> 委派,以及可讓您定義型別之間的轉換之 Converter<TInput, TOutput> 委派。
List<T> 類別可讓您指定自己的 IComparer<T> 泛型介面實作,以排序及搜尋清單。SortedDictionary<TKey, TValue> 和 SortedList<TKey, TValue> 類別也有這項功能,也允許在建立集合時指定比較子。同樣地,Dictionary<TKey, TValue> 和 KeyedCollection<TKey, TItem> 類別也可讓您指定自己的相等比較子。