Dela via


När du ska använda allmänna samlingar

Med hjälp av generiska samlingar får du den automatiska fördelen med typsäkerhet utan att behöva härleda från en bassamlingstyp och implementera typspecifika medlemmar. Generiska samlingstyper fungerar också i allmänhet bättre än motsvarande icke-generiska samlingstyper (och bättre än typer som härleds från icke-generiska bassamlingstyper) när samlingselementen är värdetyper, eftersom det inte finns något behov av att boxa elementen med generiska objekt.

För program som riktar in sig på .NET Standard 1.0 eller senare använder du de allmänna samlingsklasserna i System.Collections.Concurrent namnområdet när flera trådar kan lägga till eller ta bort objekt från samlingen samtidigt. När du vill ha oföränderlighet bör du dessutom överväga de generiska samlingsklasserna i System.Collections.Immutable namnområdet.

Följande allmänna typer motsvarar befintliga samlingstyper:

Ytterligare typer

Flera generiska samlingstyper har inte icke-generiska motsvarigheter. Dessa inkluderar:

Oföränderliga byggare

När du vill ha oföränderlighetsfunktioner i din app System.Collections.Immutable erbjuder namnområdet allmänna samlingstyper som du kan använda. Alla oföränderliga samlingstyper erbjuder Builder klasser som kan optimera prestanda när du utför flera mutationer. Klassen Builder batchar åtgärder i ett föränderligt tillstånd. När alla mutationer har slutförts anropar ToImmutable du metoden för att "frysa" alla noder och skapar en oföränderlig generisk samling, till exempel en ImmutableList<T>.

Objektet Builder kan skapas genom att anropa den icke-generiska CreateBuilder() metoden. Från en Builder instans kan du anropa ToImmutable(). På samma sätt kan du anropa ToBuilder() från Immutable* samlingen för att skapa en builder-instans från den generiska oföränderliga samlingen. Följande är de olika Builder typerna.

LINQ till objekt

Med funktionen LINQ till objekt kan du använda LINQ-frågor för att komma åt minnesinterna objekt så länge objekttypen implementerar System.Collections.IEnumerable gränssnittet eller System.Collections.Generic.IEnumerable<T> . LINQ-frågor ger ett vanligt mönster för åtkomst till data. är vanligtvis mer koncisa och läsbara än standardloopar foreach och tillhandahåller funktioner för filtrering, ordning och gruppering. LINQ-frågor kan också förbättra prestanda. Mer information finns i LINQ to Objects (C#), LINQ to Objects (Visual Basic), and Parallel LINQ (PLINQ).

Ytterligare funktioner

Vissa av de generiska typerna har funktioner som inte finns i de icke-generiska samlingstyperna. Klassen, som motsvarar den icke-generiska ArrayList klassen, har till exempel List<T> ett antal metoder som accepterar allmänna ombud, till exempel ombudet Predicate<T> som gör att du kan ange metoder för att söka i listan, ombudet Action<T> som representerar metoder som agerar på varje element i listan och ombudet Converter<TInput,TOutput> som låter dig definiera konverteringar mellan typer.

Med List<T> klassen kan du ange egna IComparer<T> allmänna gränssnittsimplementeringar för sortering och sökning i listan. Klasserna SortedDictionary<TKey,TValue> och SortedList<TKey,TValue> har också den här funktionen. Med de här klasserna kan du dessutom ange jämförelseobjekt när samlingen skapas. På liknande sätt kan klasserna Dictionary<TKey,TValue> och KeyedCollection<TKey,TItem> ange dina egna likhetsjämförlikare.

Se även