Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ü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 elemet általában az érték lekérése után elvetik?
Ha igen, érdemes lehet az Queue osztályt vagy az Queue<T> általános osztályt használni, ha első be, első ki (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ó be, első ki (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 . Az átváltoztathatatlanság érdekében vegye figyelembe a változtathatatlan verziókat, ImmutableQueue<T> és ImmutableStack<T>.
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 Thread-Safe 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 Thread-Safe 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. Az állandóság érdekében vegye figyelembe a ImmutableArray<T> és ImmutableList<T> nem módosítható általános verziókat.
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>.
A NameObjectCollectionBase és NameValueCollection osztályok, valamint az KeyedCollection<TKey,TItem> és SortedList<TKey,TValue> általános osztályok hozzáférést biztosítanak elemeikhez akár a nulla alapú index, akár 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, amelyek az IList interfészre vagy a IList<T> általános interfészre épülnek. 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: Használhatja a gyűjtemények bármelyikét az IDictionary interfész vagy a IDictionary<TKey,TValue> generikus interfész alapján. Nem módosítható beállításhoz vegye figyelembe a IImmutableSet<T> vagy a IImmutableDictionary<TKey,TValue> á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 ahogyan azokat beírták?
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 a IComparer felület SortedList osztályhoz való implementálásán, valamint a IComparer<T> általános felületnek a SortedList<TKey,TValue> és SortedDictionary<TKey,TValue> általános osztályok számára történő 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ípusokkal kapcsolatos további információkért tekintse meg a Mikor érdemes Thread-Safe gyűjteményt használni részt.
Olyan gyűjteményekre van szüksége, amelyek csak karakterláncokat fogadnak el?
StringCollection (IList alapján) és StringDictionary (az alapján IDictionary) a System.Collections.Specialized névtérben találhatók.
Emellett a System.Collections.Generic névtérben található bármely általános gyűjteményosztályt használhatja erősen típusos szöveggyűjteményekként, ha megadja a String osztályt azok általános típusargumentumaként. Deklarálhat például egy változót Lista<String> vagy Szótár<String,String> 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).