Kdy použít obecné kolekce

Použití obecných kolekcí poskytuje automatickou výhodu bezpečnosti typů, aniž byste museli odvodit základní typ kolekce a implementovat členy specifické pro typ. Obecné typy kolekcí také obecně fungují lépe než odpovídající negenerické typy kolekcí (a lepší než typy odvozené z negenerických základních typů kolekcí), pokud jsou prvky kolekce typy hodnot, protože u obecných typů není nutné prvky zadávat.

Pro programy, které cílí na .NET Standard 1.0 nebo novější, použijte obecné třídy kolekce v System.Collections.Concurrent oboru názvů, pokud více vláken může přidávat nebo odebírat položky z kolekce současně. Pokud je navíc neměnnost požadovaná, zvažte obecné třídy kolekce v System.Collections.Immutable oboru názvů.

Následující obecné typy odpovídají existujícím typům kolekcí:

Další typy

Několik obecných typů kolekcí nemá negenerické protějšky. Jsou to tyto země:

Neměnní tvůrci

Pokud chcete mít v aplikaci neměnnost, nabízí obor názvů obecné typy kolekcí, System.Collections.Immutable které můžete použít. Všechny neměnné typy kolekcí nabízejí Builder třídy, které můžou optimalizovat výkon při provádění několika mutací. Builder Třídy dávkové operace v proměnlivém stavu. Po dokončení všech mutací zavolejte metodu ToImmutable "ukotvit" všechny uzly a vytvořte neměnnou obecnou kolekci, ImmutableList<T>například .

Objekt Builder lze vytvořit voláním negenerické CreateBuilder() metody. Builder Z instance můžete volat ToImmutable(). Podobně můžete z Immutable* kolekce volat ToBuilder() vytvoření instance tvůrce z obecné neměnné kolekce. Níže jsou uvedené různé Builder typy.

LINQ na objekty

Funkce LINQ to Objects umožňuje používat dotazy LINQ pro přístup k objektům v paměti, pokud typ objektu System.Collections.IEnumerable implementuje objekt nebo System.Collections.Generic.IEnumerable<T> rozhraní. Dotazy LINQ poskytují běžný vzor pro přístup k datům; jsou obvykle stručnější a čitelnější než standardní foreach smyčky a poskytují možnosti filtrování, řazení a seskupení. Dotazy LINQ můžou také zlepšit výkon. Další informace najdete v tématu LINQ to Objects (C#), LINQ to Objects (Visual Basic) a Parallel LINQ (PLINQ).

Další funkce

Některé obecné typy mají funkce, které nejsou nalezeny v negenerických typech kolekce. Například List<T> třída, která odpovídá negenerické ArrayList třídě, má řadu metod, které přijímají obecné delegáty, jako Predicate<T> je delegát, který umožňuje určit metody pro vyhledávání v seznamu, Action<T> delegát, který představuje metody, které fungují na každém prvku seznamu, a Converter<TInput,TOutput> delegát, který umožňuje definovat převody mezi typy.

Třída List<T> umožňuje zadat vlastní IComparer<T> obecné implementace rozhraní pro řazení a vyhledávání v seznamu. SortedList<TKey,TValue> Tyto SortedDictionary<TKey,TValue> funkce mají také tyto třídy. Kromě toho tyto třídy umožňují určit porovnávače při vytváření kolekce. Podobně Dictionary<TKey,TValue> umožňují určit vlastní porovnávače rovnosti a KeyedCollection<TKey,TItem> třídy.

Viz také