Megosztás a következőn keresztül:


Mikor érdemes általános gyűjteményeket használni?

Az általános gyűjtemények használata automatikusan kihasználja a típusbiztonság előnyeit anélkül, hogy alapgyűjtemény-típusból kellene származnia, és típusspecifikus tagokat kellene implementálnia. Az általános gyűjteménytípusok általában jobban teljesítenek, mint a megfelelő nemgenerikus gyűjteménytípusok (és jobbak, mint a nemgenerikus alapgyűjtemény-típusokból származó típusok), ha a gyűjteményelemek értéktípusok, mivel az általános gyűjtemények esetében nincs szükség az elemek bekeretezésére.

A .NET Standard 1.0-s vagy újabb verzióját megcélozó programok esetében használja a névtérben lévő System.Collections.Concurrent általános gyűjteményosztályokat, ha több szál egyidejűleg ad hozzá vagy távolít el elemeket a gyűjteményből. Emellett, ha nem módosítható, vegye figyelembe a névtérben lévő System.Collections.Immutable általános gyűjteményosztályokat.

A következő általános típusok a meglévő gyűjteménytípusoknak felelnek meg:

További típusok

Számos általános gyűjteménytípus nem rendelkezik nemgenerikus megfelelőkkel. Ezek a következők:

  • LinkedList<T> egy általános célú csatolt lista, amely O(1) beszúrási és eltávolítási műveleteket biztosít.

  • SortedDictionary<TKey,TValue> O(log n) beszúrási és lekérési műveletekkel rendelkező rendezett szótár, amely hasznos alternatívát jelent a SortedList<TKey,TValue>.

  • KeyedCollection<TKey,TItem> egy hibrid egy lista és egy szótár között, amely lehetővé teszi a saját kulcsokat tartalmazó objektumok tárolását.

  • BlockingCollection<T> határoló és blokkoló funkciókkal rendelkező gyűjteményosztályt implementál.

  • ConcurrentBag<T> a rendezetlen elemek gyors beszúrását és eltávolítását biztosítja.

Nem módosítható építők

Ha az alkalmazásban nem módosítható funkciókra van szüksége, a System.Collections.Immutable névtér általános gyűjteménytípusokat kínál, amelyek használhatók. Az összes nem módosítható gyűjteménytípus olyan osztályokat kínál Builder , amelyek több mutáció végrehajtásakor optimalizálhatják a teljesítményt. Az Builder osztály mutable állapotban kötegeli a műveleteket. Ha az összes mutáció befejeződött, hívja meg a metódust, ToImmutable hogy "fagyasztsa" az összes csomópontot, és hozzon létre egy nem módosítható általános gyűjteményt, például egy ImmutableList<T>.

Az Builder objektum nemgenerikus CreateBuilder() metódus meghívásával hozható létre. Egy Builder példányból meghívhat ToImmutable(). Hasonlóképpen, a Immutable* gyűjteményből meghívhat ToBuilder() egy szerkesztőpéldányt az általános nem módosítható gyűjteményből. A következők a különböző Builder típusok.

LINQ az objektumokhoz

A LINQ to Objects funkció lehetővé teszi a LINQ-lekérdezések használatát a memóriában lévő objektumok eléréséhez, amíg az objektumtípus megvalósítja az objektumot vagy System.Collections.Generic.IEnumerable<T> a System.Collections.IEnumerable felületet. A LINQ-lekérdezések általános mintát biztosítanak az adatokhoz való hozzáféréshez; általában tömörebbek és olvashatóbbak, mint a standard foreach hurkok; és szűrési, rendezési és csoportosítási képességeket biztosítanak. A LINQ-lekérdezések a teljesítményt is javíthatják. További információ: LINQ to Objects (C#), LINQ to Objects (Visual Basic), parallel LINQ (PLINQ).

További funkciók

Egyes általános típusok olyan funkciókkal rendelkeznek, amelyek nem találhatók a nemgenerikus gyűjteménytípusokban. A nemgenerikus ArrayList osztálynak megfelelő osztály például List<T> számos olyan metódussal rendelkezik, amelyek általános meghatalmazottakat fogadnak el, például Predicate<T> az a meghatalmazott, amely lehetővé teszi a lista keresésére szolgáló módszerek megadását, a Action<T> lista egyes elemein működő metódusokat képviselő delegáltat, valamint a Converter<TInput,TOutput> típusok közötti konverziót lehetővé tevő delegáltat.

Az List<T> osztály lehetővé teszi saját IComparer<T> általános felületi implementációk megadását a lista rendezéséhez és kereséséhez. Az SortedDictionary<TKey,TValue> osztályok is SortedList<TKey,TValue> rendelkeznek ezzel a képességgel. Ezen kívül ezek az osztályok lehetővé teszik összehasonlítók megadását a gyűjtemény létrehozásakor. Hasonló módon az és KeyedCollection<TKey,TItem> az Dictionary<TKey,TValue> osztályok lehetővé teszik saját egyenlőségi összehasonlítók megadását.

Lásd még