Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Nezapomeňte pečlivě vybrat třídu kolekce. Použití nesprávného typu může omezit použití kolekce.
Důležité
Vyhněte se použití typů v oboru názvů System.Collections. Obecné a souběžné verze kolekcí se doporučují kvůli větší typové bezpečnosti a dalším vylepšením.
Zvažte následující otázky:
Potřebujete sekvenční seznam, kde je prvek obvykle zahozen po načtení jeho hodnoty?
Pokud ano, zvažte použití Queue třídy nebo Queue<T> obecné třídy, pokud potřebujete chování first-in, first-out (FIFO). Pokud potřebujete chování typu last-in, first-out (LIFO) zvažte použití Stack třídy nebo Stack<T> obecné třídy. Pro bezpečný přístup z více vláken použijte souběžné verze ConcurrentQueue<T> a ConcurrentStack<T>. Pro neměnnost zvažte neměnné verze ImmutableQueue<T> a ImmutableStack<T>.
Pokud ne, zvažte použití ostatních kolekcí.
Potřebujete získat přístup k prvkům v určitém pořadí, jako je FIFO, LIFO nebo náhodné?
Třída Queue, stejně jako Queue<T>, ConcurrentQueue<T> a ImmutableQueue<T>, všechny obecné třídy nabízejí FIFO přístup. Další informace naleznete v tématu Kdy použít kolekci Thread-Safe.
Třída Stack, stejně jako Stack<T>, ConcurrentStack<T> a ImmutableStack<T>, všechny obecné třídy nabízejí přístup LIFO. Další informace naleznete v tématu Kdy použít kolekci Thread-Safe.
Obecná LinkedList<T> třída umožňuje sekvenční přístup buď z hlavy na ocas, nebo z ocasu do hlavy.
Potřebujete získat přístup ke každému prvku podle indexu?
Třídy ArrayList a StringCollection a obecná třída List<T> poskytují přístup ke svým prvkům pomocí jejich indexu začínajícího od nuly. Pro neměnnost zvažte neměnné obecné verze ImmutableArray<T> a ImmutableList<T>.
Třídy Hashtable, SortedList, ListDictionary a StringDictionary a obecné třídy Dictionary<TKey,TValue> a SortedDictionary<TKey,TValue> nabízejí přístup k jejich prvkům pomocí klíče prvku. Kromě toho existují neměnné verze několika odpovídajících typů: ImmutableHashSet<T>, ImmutableDictionary<TKey,TValue>, ImmutableSortedSet<T>a ImmutableSortedDictionary<TKey,TValue>.
Třídy NameObjectCollectionBase a NameValueCollectionKeyedCollection<TKey,TItem>SortedList<TKey,TValue> obecné třídy nabízejí přístup k jejich prvkům buď indexem založeným na nule, nebo klíčem prvku.
Bude každý prvek obsahovat jednu hodnotu, kombinaci jednoho klíče a jedné hodnoty nebo kombinaci jednoho klíče a více hodnot?
Jedna hodnota: Použijte některou z kolekcí založenými na IList rozhraní nebo IList<T> generickém rozhraní. Zvažte neměnnou možnost IImmutableList<T> obecného rozhraní.
Jeden klíč a jedna hodnota: Použijte některou z kolekcí, které vycházejí z rozhraní IDictionary nebo obecného rozhraní IDictionary<TKey,TValue>. U neměnné volby zvažte IImmutableSet<T> nebo IImmutableDictionary<TKey,TValue> generická rozhraní.
Jedna hodnota s vloženým klíčem: Použijte KeyedCollection<TKey,TItem> obecnou třídu.
Jeden klíč a více hodnot: Použijte NameValueCollection třídu.
Potřebujete prvky seřadit odlišně od toho, jak byly zadány?
Třída Hashtable seřadí své prvky podle svých kódů hash.
Třída SortedList a obecné třídy SortedList<TKey,TValue> a SortedDictionary<TKey,TValue> seřadí své prvky podle klíče. Pořadí řazení je založeno na implementaci IComparer rozhraní pro SortedList třídu a na implementaci IComparer<T> obecného rozhraní pro SortedList<TKey,TValue> třídy a SortedDictionary<TKey,TValue> obecné třídy. Ze dvou obecných typů SortedDictionary<TKey,TValue> nabízí lepší výkon než SortedList<TKey,TValue>, zatímco SortedList<TKey,TValue> spotřebovává méně paměti.
ArrayList poskytuje metodu Sort , která přebírá implementaci IComparer jako parametr. Její obecný protějšek, List<T> obecná třída, poskytuje metodu Sort , která přebírá implementaci IComparer<T> obecného rozhraní jako parametr.
Potřebujete rychlé vyhledávání a načítání informací?
- ListDictionary je rychlejší než Hashtable u malých kolekcí (10 položek nebo méně). Obecná Dictionary<TKey,TValue> třída poskytuje rychlejší vyhledávání než SortedDictionary<TKey,TValue> obecná třída. Implementace s více vlákny je ConcurrentDictionary<TKey,TValue>. ConcurrentBag<T> poskytuje rychlou vícevláknovou vložku neuspořádaných dat. Další informace o obou typech pro vícevláknové zpracování naleznete v Kdy používat kolekci Thread-Safe.
Potřebujete kolekce, které přijímají pouze řetězce?
StringCollection (na základě IList) a StringDictionary (na základě IDictionary) jsou v System.Collections.Specialized oboru názvů.
Kromě toho můžete libovolnou z obecných tříd kolekcí v oboru názvů System.Collections.Generic použít jako kolekce řetězců s pevným typem, pokud specifikujete třídu String pro jejich argumenty obecného typu. Můžete například deklarovat proměnnou typu List<String> nebo Dictionary<String,String>.
LINQ to – objekty a PLINQ
LINQ to Objects umožňuje vývojářům používat dotazy LINQ pro přístup k objektům v paměti, pokud typ objektu implementuje IEnumerable nebo IEnumerable<T>. Dotazy LINQ poskytují běžný vzor pro přístup k datům, obvykle jsou stručnější a čitelnější než standardní foreach smyčky a poskytují možnosti filtrování, řazení a seskupování. Další informace najdete v tématu LINQ to Objects (C#) a LINQ to Objects (Visual Basic).
PLINQ poskytuje paralelní implementaci LINQ to Objects, která nabízí rychlejší spouštění dotazů v mnoha scénářích prostřednictvím efektivnějšího používání vícejádrových počítačů. Další informace naleznete v tématu Paralelní LINQ (PLINQ).