Gyűjteményosztály kiválasztása
Ügyeljen arra, hogy gondosan válassza ki a gyűjteményosztályt. A nem megfelelő típus használata korlátozhatja a gyűjtemény használatát.
Fontos
A névtérben ne használja a System.Collections típusokat. A gyűjtemények általános és egyidejű verzióit a nagyobb típusú biztonság és egyéb fejlesztések miatt javasoljuk.
A következő kérdéseket kell figyelembe venni:
Szüksége van egy szekvenciális listára, ahol az elem általában az érték lekérése után lesz elvetve?
Ha igen, érdemes lehet az Queue osztályt vagy az Queue<T> általános osztályt használni, ha első, első előtti (FIFO) viselkedésre van szüksége. Érdemes lehet az Stack osztályt vagy az Stack<T> általános osztályt használni, ha az utolsó, első előtti (LIFO) viselkedésre van szüksége. Több szálból való biztonságos hozzáféréshez használja az egyidejű verziókat ConcurrentQueue<T> és ConcurrentStack<T>a . A nem módosíthatóság érdekében vegye figyelembe a nem módosítható verziókat és ImmutableQueue<T>ImmutableStack<T>a .
Ha nem, fontolja meg a többi gyűjtemény használatát.
Bizonyos sorrendben kell elérnie az elemeket, például a FIFO-t, a LIFO-t vagy a véletlenszerűt?
Az Queue osztály, valamint az Queue<T>, , ConcurrentQueue<T>és ImmutableQueue<T> általános osztályok mind FIFO-hozzáférést kínálnak. További információ: Mikor érdemes szál-Széf gyűjteményt használni.
Az Stack osztály, valamint az Stack<T>, , ConcurrentStack<T>és ImmutableStack<T> általános osztályok mind LIFO-hozzáférést kínálnak. További információ: Mikor érdemes szál-Széf gyűjteményt használni.
Az LinkedList<T> általános osztály lehetővé teszi a szekvenciális hozzáférést a fejtől a farokig, vagy a faroktól a fejig.
Minden egyes elemet index alapján kell elérnie?
Az ArrayList és StringCollection az osztályok és az List<T> általános osztály az elem nulla alapú indexével biztosít hozzáférést az elemekhez. A nem módosíthatóság érdekében vegye figyelembe a nem módosítható általános verziókat és ImmutableArray<T>ImmutableList<T>a .
A Hashtable, SortedList, ListDictionary, és StringDictionary osztályok, valamint az Dictionary<TKey,TValue> általános SortedDictionary<TKey,TValue> osztályok az elem kulcsával hozzáférést biztosítanak az elemeikhez. Emellett több megfelelő típusnak is vannak módosítható verziói: ImmutableHashSet<T>, ImmutableDictionary<TKey,TValue>, ImmutableSortedSet<T>és ImmutableSortedDictionary<TKey,TValue>.
Az NameObjectCollectionBase és NameValueCollection az osztályok, valamint az KeyedCollection<TKey,TItem> általános osztályok SortedList<TKey,TValue> hozzáférést biztosítanak az elemeikhez a nulla alapú index vagy az elem kulcsa révén.
Minden elem tartalmaz egy értéket, egy kulcs és egy érték kombinációját, vagy egy kulcs és több érték kombinációját?
Egy érték: Használja a gyűjtemények bármelyikét az interfész vagy az IListIList<T> általános felület alapján. Nem módosítható beállítás esetén vegye figyelembe az IImmutableList<T> általános felületet.
Egy kulcs és egy érték: A gyűjtemények bármelyikét használhatja az interfész vagy az IDictionaryIDictionary<TKey,TValue> általános felület alapján. Nem módosítható beállítás esetén vegye figyelembe az általános vagy IImmutableDictionary<TKey,TValue> az IImmutableSet<T> általános felületeket.
Egy érték beágyazott kulccsal: Használja az általános osztályt KeyedCollection<TKey,TItem> .
Egy kulcs és több érték: Használja az osztályt NameValueCollection .
Másképp kell rendeznie az elemeket, mint a beírt elemeket?
Az Hashtable osztály a kivonatkódjaik alapján rendezi az elemeket.
Az SortedList osztály és az SortedList<TKey,TValue>SortedDictionary<TKey,TValue> általános osztályok a kulcs alapján rendezik az elemeket. A rendezési sorrend az osztály felületének IComparerSortedList implementálásán, valamint az IComparer<T> általános és SortedDictionary<TKey,TValue> általános osztályok általános felületének SortedList<TKey,TValue> implementálásán alapul. A két általános típus közül jobb teljesítményt nyújt, SortedDictionary<TKey,TValue> mint SortedList<TKey,TValue>a , miközben SortedList<TKey,TValue> kevesebb memóriát használ fel.
ArrayList egy olyan metódust Sort biztosít, amely egy implementációt vesz IComparer paraméterként. Az általános megfelelője, az List<T> általános osztály olyan metódust Sort biztosít, amely az IComparer<T> általános felület paraméterként való implementálását veszi igénybe.
Szüksége van gyors keresésre és az információk lekérésére?
- ListDictionary gyorsabb, mint Hashtable a kis gyűjtemények (10 elem vagy kevesebb). Az Dictionary<TKey,TValue> általános osztály gyorsabb keresést biztosít, mint az SortedDictionary<TKey,TValue> általános osztály. A többszálas implementáció a következő ConcurrentDictionary<TKey,TValue>: . ConcurrentBag<T> gyors, többszálas beszúrást biztosít a rendezetlen adatokhoz. A többszálas típusokról további információt a Mikor érdemes szál-Széf gyűjteményt használni című témakörben talál.
Olyan gyűjteményekre van szüksége, amelyek csak sztringeket fogadnak el?
StringCollection (alapján IList) és StringDictionary (az alapján IDictionary) a System.Collections.Specialized névtérben vannak.
Emellett a névtérben lévő System.Collections.Generic összes általános gyűjteményosztályt használhatja erősen beírt sztringgyűjteményekként, ha megadja az osztályt az String általános típusargumentumokhoz. Deklarálhat például egy változót listasztring<> vagy szótári<sztring,sztring> típusúnak.
LINQ az objektumokhoz és a PLINQ-hoz
A LINQ to Objects lehetővé teszi a fejlesztők számára, hogy LINQ-lekérdezésekkel hozzáférjenek a memóriában lévő objektumokhoz, amíg az objektumtípus implementálja IEnumerable vagy IEnumerable<T>. 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. További információ: LINQ to Objects (C#) és LINQ to Objects (Visual Basic).
A PLINQ a LINQ párhuzamos implementációját biztosítja az objektumokhoz, amelyek többmagos számítógépek hatékonyabb használatával számos esetben gyorsabb lekérdezés-végrehajtást biztosítanak. További információ: Parallel LINQ (PLINQ).
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: