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:
List<T> az a általános osztály, amely a következőnek felel meg ArrayList: .
Dictionary<TKey,TValue> és ConcurrentDictionary<TKey,TValue> azok az általános osztályok, amelyek megfelelnek a következőnek Hashtable: .
Collection<T> az a általános osztály, amely a következőnek felel meg CollectionBase: . Collection<T> alaposztályként használható, de nem CollectionBaseabsztrakt, ami sokkal egyszerűbbé teszi a használatát.
ReadOnlyCollection<T> az a általános osztály, amely a következőnek felel meg ReadOnlyCollectionBase: . ReadOnlyCollection<T> nem absztrakt, és olyan konstruktorsal rendelkezik, amely megkönnyíti egy meglévő List<T> írásvédett gyűjteményként való elérhetővé tételét.
A Queue<T>, ConcurrentQueue<T>, ImmutableQueue<T>, ImmutableArray<T>, SortedList<TKey,TValue>és ImmutableSortedSet<T> általános osztályok az azonos nevű nemgenerikus osztályoknak 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.
- ImmutableArray<T>.Builder
- ImmutableDictionary<TKey,TValue>.Builder
- ImmutableHashSet<T>.Builder
- ImmutableList<T>.Builder
- ImmutableSortedDictionary<TKey,TValue>.Builder
- ImmutableSortedSet<T>.Builder
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
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: