Wanneer algemene verzamelingen worden gebruikt
Het gebruik van algemene verzamelingen biedt u het automatische voordeel van typeveiligheid zonder dat u hoeft af te leiden van een basisverzamelingstype en typespecifieke leden te implementeren. Algemene verzamelingstypen presteren over het algemeen ook beter dan de overeenkomstige niet-generische verzamelingstypen (en beter dan typen die zijn afgeleid van niet-generische basisverzamelingstypen) wanneer de verzamelingselementen waardetypen zijn, omdat er bij generics geen elementen hoeven te worden gebruikt.
Voor programma's die zich richten op .NET Standard 1.0 of hoger, gebruikt u de algemene verzamelingsklassen in de System.Collections.Concurrent naamruimte wanneer meerdere threads items tegelijk aan de verzameling kunnen toevoegen of verwijderen. Houd ook rekening met de algemene verzamelingsklassen in de System.Collections.Immutable naamruimte wanneer onveranderbaarheid gewenst is.
De volgende algemene typen komen overeen met bestaande verzamelingstypen:
List<T> is de algemene klasse die overeenkomt met ArrayList.
Dictionary<TKey,TValue> en ConcurrentDictionary<TKey,TValue> zijn de algemene klassen die overeenkomen met Hashtable.
Collection<T> is de algemene klasse die overeenkomt met CollectionBase. Collection<T> kan worden gebruikt als basisklasse, maar in tegenstelling tot CollectionBase, is het niet abstract, waardoor het veel gemakkelijker te gebruiken is.
ReadOnlyCollection<T> is de algemene klasse die overeenkomt met ReadOnlyCollectionBase. ReadOnlyCollection<T> is niet abstract en heeft een constructor waarmee u een bestaande List<T> verzameling eenvoudig als alleen-lezenverzameling kunt weergeven.
De Queue<T>klassen , ConcurrentQueue<T>, ImmutableQueue<T>, ImmutableArray<T>en SortedList<TKey,TValue>ImmutableSortedSet<T> algemene klassen komen overeen met de respectieve niet-genrische klassen met dezelfde namen.
Aanvullende typen
Verschillende algemene verzamelingstypen hebben geen niet-generische tegenhangers. Deze omvatten het volgende:
LinkedList<T> is een gekoppelde lijst voor algemeen gebruik met O(1) invoeg- en verwijderingsbewerkingen.
SortedDictionary<TKey,TValue> is een gesorteerde woordenlijst met O(logboek
n
) invoeg- en ophaalbewerkingen, waardoor het een nuttig alternatief is voor SortedList<TKey,TValue>.KeyedCollection<TKey,TItem> is een hybride verbinding tussen een lijst en een woordenlijst, die een manier biedt om objecten op te slaan die hun eigen sleutels bevatten.
BlockingCollection<T> implementeert een verzamelingsklasse met begrenzings- en blokkerende functionaliteit.
ConcurrentBag<T> biedt snelle invoeging en verwijdering van ongeordeerde elementen.
Onveranderbare opbouwfuncties
Wanneer u onveranderbaarheidsfunctionaliteit in uw app wenst, biedt de System.Collections.Immutable naamruimte algemene verzamelingstypen die u kunt gebruiken. Alle onveranderbare verzamelingstypen bieden Builder
klassen die de prestaties kunnen optimaliseren wanneer u meerdere mutaties uitvoert. De Builder
klasse batches bewerkingen in een veranderlijke status. Wanneer alle mutaties zijn voltooid, roept u de ToImmutable
methode aan om alle knooppunten te "blokkeren" en een onveranderbare algemene verzameling te creƫren, bijvoorbeeld een ImmutableList<T>.
Het Builder
object kan worden gemaakt door de niet-generische CreateBuilder()
methode aan te roepen. Vanuit een Builder
instantie kunt u aanroepen ToImmutable()
. Op dezelfde manier kunt u vanuit de Immutable*
verzameling aanroepen ToBuilder()
om een opbouwfunctieexemplaren te maken op basis van de algemene onveranderbare verzameling. Hier volgen de verschillende Builder
typen.
- ImmutableArray<T>.Builder
- ImmutableDictionary<TKey,TValue>.Builder
- ImmutableHashSet<T>.Builder
- ImmutableList<T>.Builder
- ImmutableSortedDictionary<TKey,TValue>.Builder
- ImmutableSortedSet<T>.Builder
LINQ naar objecten
Met de functie LINQ naar objecten kunt u LINQ-query's gebruiken voor toegang tot in-memory objecten zolang het objecttype de System.Collections.IEnumerable of System.Collections.Generic.IEnumerable<T> interface implementeert. LINQ-query's bieden een gemeenschappelijk patroon voor toegang tot gegevens; zijn doorgaans beknopter en leesbaarder dan standaardlussen foreach
; en bieden mogelijkheden voor filteren, ordenen en groeperen. LINQ-query's kunnen ook de prestaties verbeteren. Zie LINQ naar objecten (C#) en LINQ naar objecten (Visual Basic) en Parallel LINQ (PLINQ) voor meer informatie.
Aanvullende functionaliteit
Sommige algemene typen hebben functionaliteit die niet wordt gevonden in de niet-generische verzamelingstypen. De klasse, die overeenkomt met de niet-generische ArrayList klasse, heeft bijvoorbeeld List<T> een aantal methoden die algemene gemachtigden accepteren, zoals de Predicate<T> gemachtigde waarmee u methoden kunt opgeven voor het zoeken in de lijst, de Action<T> gemachtigde die methoden vertegenwoordigt die op elk element van de lijst reageren en de Converter<TInput,TOutput> gemachtigde waarmee u conversies tussen typen kunt definiƫren.
Met List<T> de klasse kunt u uw eigen IComparer<T> algemene interface-implementaties opgeven voor het sorteren en doorzoeken van de lijst. De SortedDictionary<TKey,TValue> en SortedList<TKey,TValue> klassen hebben ook deze mogelijkheid. Bovendien kunt u met deze klassen vergelijkingen opgeven wanneer de verzameling wordt gemaakt. Op vergelijkbare wijze kunt u met de Dictionary<TKey,TValue> en KeyedCollection<TKey,TItem> klassen uw eigen gelijkheidsgelijkers opgeven.