何時使用泛型集合

使用泛型集合可提供您類型安全的自動好處,而無須衍生自基底集合類型同時實作類型專屬的成員。 當集合元素為實值類型,泛型集合類型也通常會優於對應的非泛型集合類型 (且優於衍生自非泛型基底集合類型的類型),因為有了泛型,就不需要對這些元素進行 box。

對於目標為 .NET Standard 1.0 或更新版本的程式,當多個執行緒可能同時在新增或移除集合中的項目時,您應使用 System.Collections.Concurrent 命名空間中的泛型集合類別。 此外,當需要不變性時,請考慮命名空間中的 System.Collections.Immutable 泛型集合類別。

下列泛型類型對應至現有的集合類型:

其他類型

數個泛型集合類型沒有非泛型的對應項目。 這些因素包括:

不可變的產生器

當您希望應用程式中有不變性功能時,System.Collections.Immutable 命名空間會提供您可以使用的泛型集合類型。 所有不可變的集合類型都會提供 Builder 類別,可在您執行多個變動時將效能最佳化。 Builder 類別會批次處理處於可變動狀態的作業。 當所有變動都完成時,請呼叫 ToImmutable 方法來「凍結」所有節點,並建立不可變的泛型集合,例如 ImmutableList<T>

呼叫非泛型 CreateBuilder() 方法,即可建立 Builder 物件。 您可以從 Builder 執行個體呼叫 ToImmutable()。 同樣地,您可以從 Immutable* 集合呼叫 ToBuilder(),以從泛型不可變集合建立產生器執行個體。 以下是各種 Builder 類型。

LINQ to Objects

只要物件類型實作 System.Collections.IEnumerableSystem.Collections.Generic.IEnumerable<T> 介面,LINQ to Objects 功能就可讓您使用 LINQ 查詢以存取記憶體中的物件。 LINQ 查詢提供一般模式以存取資料;通常比標準的 foreach 迴圈更精簡、可讀性更高;並提供篩選、排序和群組功能。 LINQ 查詢也可以提升效能。 如需詳細資訊,請參閱 LINQ to Objects (C#)LINQ to Objects (Visual Basic)Parallel LINQ (PLINQ)

其他功能

某些泛型類型具有非泛型集合類型中找不到的功能。 例如, List<T> 類別 (對應至非泛型 ArrayList 類別) 有許多接受泛型委派的方法,例如 Predicate<T> 委派 (允許您指定方法來搜尋清單)、 Action<T> 委派 (代表對清單每個項目採取動作的方法),以及 Converter<TInput,TOutput> 委派 (可定義類型之間的轉換)。

List<T> 類別可讓您指定自己的 IComparer<T> 泛型介面實作,以排序及搜尋清單。 SortedDictionary<TKey,TValue>SortedList<TKey,TValue> 類別也具有這項功能。 此外,這些類別可讓您在建立集合時,指定比較子。 Dictionary<TKey,TValue>KeyedCollection<TKey,TItem> 類別會以類似的方式,讓您能指定自己的相等比較子。

另請參閱