Koleksiyon Sınıfı Seçme
Koleksiyon sınıfınızı dikkatle seçtiğinizden emin olun. Yanlış türü kullanmak koleksiyon kullanımınızı kısıtlayabilir.
Önemli
Ad alanında türleri kullanmaktan System.Collections kaçının. Daha fazla tür güvenliği ve diğer geliştirmeler nedeniyle koleksiyonların genel ve eşzamanlı sürümleri önerilir.
Aşağıdaki soruları göz önünde bulundurun:
Öğenin değeri alındıktan sonra genellikle atıldığı sıralı bir listeye ihtiyacınız var mı?
Evet ise, ilk gelen ilk çıkar (FIFO) davranışına ihtiyacınız varsa sınıfını veya Queue<T> genel sınıfı kullanmayı Queue göz önünde bulundurun. Last-in Stack , first-out (LIFO) davranışına ihtiyacınız varsa sınıfını veya Stack<T> genel sınıfı kullanmayı göz önünde bulundurun. Birden çok iş parçacığından güvenli erişim için ve eşzamanlı sürümlerini ConcurrentQueue<T>ConcurrentStack<T>kullanın. Değişmezlik için sabit sürümleri ImmutableQueue<T> ve ImmutableStack<T>değerlerini göz önünde bulundurun.
Aksi takdirde diğer koleksiyonları kullanmayı göz önünde bulundurun.
Öğelere FIFO, LIFO veya rastgele gibi belirli bir sırada mı erişmeniz gerekiyor?
Sınıfın Queue yanı Queue<T>sıra , ConcurrentQueue<T>ve ImmutableQueue<T> genel sınıflarının tümü FIFO erişimi sunar. Daha fazla bilgi için bkz. İş Parçacığı Kasa Koleksiyonu Ne Zaman Kullanılır?
Sınıfın Stack yanı Stack<T>sıra , ConcurrentStack<T>ve ImmutableStack<T> genel sınıflarının tümü LIFO erişimi sunar. Daha fazla bilgi için bkz. İş Parçacığı Kasa Koleksiyonu Ne Zaman Kullanılır?
Genel LinkedList<T> sınıf, baştan kuyruğa veya kuyruktan başa sıralı erişim sağlar.
Her öğeye dizine göre erişmeniz gerekiyor mu?
ArrayList ve StringCollection sınıfları ve genel sınıfı, öğesinin List<T> sıfır tabanlı dizinine göre öğelerine erişim sağlar. Değişmezlik için sabit genel sürümleri ImmutableArray<T> ve ImmutableList<T>değerlerini göz önünde bulundurun.
Hashtable, SortedList, ListDictionary, ve StringDictionary sınıfları ve Dictionary<TKey,TValue> ve SortedDictionary<TKey,TValue> genel sınıfları, öğesinin anahtarıyla öğelerine erişim sunar. Ayrıca, çeşitli karşılık gelen türlerin sabit sürümleri vardır: ImmutableHashSet<T>, ImmutableDictionary<TKey,TValue>, ImmutableSortedSet<T>ve ImmutableSortedDictionary<TKey,TValue>.
NameObjectCollectionBase ve NameValueCollection sınıfları ve ve KeyedCollection<TKey,TItem>SortedList<TKey,TValue> genel sınıfları, sıfır tabanlı dizine veya öğenin anahtarına göre öğelerine erişim sağlar.
Her öğe bir değer, bir anahtar ve bir değerin birleşimi veya bir anahtar ile birden çok değerin birleşimini mi içerecek?
Bir değer: Arabirime veya genel arabirime IList göre koleksiyonlardan IList<T> herhangi birini kullanın. Sabit bir seçenek için genel arabirimi göz önünde bulundurun IImmutableList<T> .
Bir anahtar ve bir değer: Arabirime veya genel arabirime IDictionary göre koleksiyonlardan IDictionary<TKey,TValue> herhangi birini kullanın. Sabit bir seçenek için veya IImmutableDictionary<TKey,TValue> genel arabirimleri göz önünde bulundurunIImmutableSet<T>.
Katıştırılmış anahtar içeren bir değer: Genel sınıfı kullanın KeyedCollection<TKey,TItem> .
Bir anahtar ve birden çok değer: sınıfını NameValueCollection kullanın.
Öğeleri girildiği şekilden farklı bir şekilde sıralamanız mı gerekiyor?
sınıfı, Hashtable öğelerini karma kodlarına göre sıralar.
SortedList sınıfı ve ve SortedList<TKey,TValue>SortedDictionary<TKey,TValue> genel sınıfları öğelerini anahtara göre sıralar. Sıralama düzeni, sınıfı için arabirimin IComparer uygulanmasına SortedList ve ve SortedDictionary<TKey,TValue> genel sınıflar için genel arabirimin IComparer<T> uygulanmasına SortedList<TKey,TValue> dayanır. İki genel türden daha SortedDictionary<TKey,TValue> iyi performans SortedList<TKey,TValue>sunarken SortedList<TKey,TValue> daha az bellek tüketir.
ArrayListSort bir uygulamayı parametre olarak alan IComparer bir yöntem sağlar. Genel karşılığı olan List<T> genel sınıfı, genel arabirimin IComparer<T> bir uygulamasını parametre olarak alan bir yöntem sağlarSort.
Hızlı aramalara ve bilgilerin alınmasına mı ihtiyacınız var?
- ListDictionary küçük koleksiyonlardan (10 veya daha az öğe) daha Hashtable hızlıdır. Genel sınıf, Dictionary<TKey,TValue> genel sınıftan SortedDictionary<TKey,TValue> daha hızlı arama sağlar. Çok iş parçacıklı uygulama şeklindedir ConcurrentDictionary<TKey,TValue>. ConcurrentBag<T> , sıralanmamış veriler için hızlı çok iş parçacıklı ekleme sağlar. Her iki çok iş parçacıklı tür hakkında daha fazla bilgi için bkz. İş Parçacığı Kasa Koleksiyonu Ne Zaman Kullanılır?
Yalnızca dizeleri kabul eden koleksiyonlara mı ihtiyacınız var?
StringCollection (temelinde IList) ve StringDictionary (temelinde IDictionary) ad alanındadır System.Collections.Specialized .
Ayrıca, genel tür bağımsız değişkenleri için sınıfı belirterek String ad alanında System.Collections.Generic bulunan genel koleksiyon sınıflarından herhangi birini kesin olarak yazılan dize koleksiyonları olarak kullanabilirsiniz. Örneğin, bir değişkeni Liste Dizesi veya Sözlük<Dizesi,Dize>> türünde olacak şekilde bildirebilirsiniz.<
LINQ to Objects ve PLINQ
LINQ to Objects, geliştiricilerin nesne türü veya IEnumerable<T>uyguladığı sürece bellek içi nesnelere erişmek için LINQ sorgularını IEnumerable kullanmasına olanak tanır. LINQ sorguları verilere erişmek için ortak bir desen sağlar, genellikle standart foreach
döngülere göre daha kısa ve okunabilirdir ve filtreleme, sıralama ve gruplandırma özellikleri sağlar. Daha fazla bilgi için bkz . LINQ to Objects (C#) ve LINQ to Objects (Visual Basic).
PLINQ, çok çekirdekli bilgisayarların daha verimli kullanımı aracılığıyla birçok senaryoda daha hızlı sorgu yürütme sunabilen NESNELERE LINQ'in paralel bir uygulamasını sağlar. Daha fazla bilgi için bkz . Parallel LINQ (PLINQ).