Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Pastikan untuk memilih kelas koleksi Anda dengan hati-hati. Menggunakan jenis yang salah dapat membatasi penggunaan koleksi Anda.
Penting
Hindari menggunakan jenis di namespace System.Collections. Versi generik dan bersamaan dari koleksi direkomendasikan karena keamanan jenisnya yang lebih besar dan peningkatan lainnya.
Pertimbangkan pertanyaan-pertanyaan berikut:
Apakah Anda memerlukan daftar berurutan di mana elemen biasanya dibuang setelah nilainya diambil?
Jika iya, pertimbangkan menggunakan kelas Queue atau kelas generik Queue<T> jika Anda membutuhkan perilaku first-in, first-out (FIFO). Pertimbangkan untuk menggunakan kelas Stack atau kelas generik Stack<T> jika Anda memerlukan perilaku last-in, first-out (LIFO). Untuk akses aman dari beberapa utas, gunakan versi bersamaan, ConcurrentQueue<T> dan ConcurrentStack<T>. Untuk imutabilitas, pertimbangkan versi yang tidak dapat diubah, ImmutableQueue<T> dan ImmutableStack<T>.
Jika tidak, pertimbangkan untuk menggunakan koleksi lain.
Apakah Anda perlu mengakses elemen dalam urutan tertentu, seperti FIFO, LIFO, atau acak?
Kelas Queue , serta Queue<T>kelas , , ConcurrentQueue<T>dan ImmutableQueue<T> generik semuanya menawarkan akses FIFO. Untuk informasi selengkapnya, lihat Kapan Menggunakan Koleksi Thread-Safe.
Kelas Stack , serta Stack<T>kelas , , ConcurrentStack<T>dan ImmutableStack<T> generik semuanya menawarkan akses LIFO. Untuk informasi selengkapnya, lihat Kapan Menggunakan Koleksi Thread-Safe.
Kelas LinkedList<T> generik memungkinkan akses berurutan baik dari kepala ke ekor, atau dari ekor ke kepala.
Apakah Anda perlu mengakses setiap elemen menurut indeks?
Kelas ArrayList dan StringCollection dan List<T> kelas generik menawarkan akses ke elemen mereka oleh indeks elemen berbasis nol. Untuk imutabilitas, pertimbangkan versi generik yang tidak dapat diubah, ImmutableArray<T> dan ImmutableList<T>.
Kelas Hashtable, SortedList, ListDictionary, dan StringDictionary, serta kelas generik Dictionary<TKey,TValue> dan SortedDictionary<TKey,TValue> menawarkan akses ke elemen mereka dengan kunci elemen. Selain itu, ada versi yang tidak dapat diubah dari beberapa jenis yang sesuai: ImmutableHashSet<T>, , ImmutableDictionary<TKey,TValue>ImmutableSortedSet<T>, dan ImmutableSortedDictionary<TKey,TValue>.
Kelas NameObjectCollectionBase dan NameValueCollection, serta kelas generik KeyedCollection<TKey,TItem> dan SortedList<TKey,TValue>, menawarkan akses ke elemen mereka baik dengan indeks berbasis nol maupun kunci elemen.
Apakah setiap elemen akan berisi satu nilai, kombinasi satu kunci dan satu nilai, atau kombinasi satu kunci dan beberapa nilai?
Satu nilai: Gunakan salah satu koleksi berdasarkan IList antarmuka atau IList<T> antarmuka generik. Untuk opsi yang tidak dapat diubah, pertimbangkan IImmutableList<T> antarmuka generik.
Satu kunci dan satu nilai: Gunakan salah satu koleksi berdasarkan IDictionary antarmuka atau IDictionary<TKey,TValue> antarmuka generik. Untuk opsi yang tidak dapat diubah, pertimbangkan IImmutableSet<T> antarmuka atau IImmutableDictionary<TKey,TValue> generik.
Satu nilai dengan kunci yang disematkan: Gunakan KeyedCollection<TKey,TItem> kelas generik.
Satu kunci dan beberapa nilai: Gunakan NameValueCollection kelas .
Apakah Anda perlu mengurutkan elemen secara berbeda dari bagaimana elemen tersebut dimasukkan?
Kelas Hashtable mengurutkan elemennya berdasarkan kode hash mereka.
Kelas SortedList, serta kelas generik SortedList<TKey,TValue> dan SortedDictionary<TKey,TValue> mengurutkan elemennya berdasarkan kunci. Urutan pengurutan didasarkan pada implementasi antarmuka IComparer untuk kelas SortedList dan pada implementasi antarmuka generik IComparer<T> untuk kelas generik SortedList<TKey,TValue> dan SortedDictionary<TKey,TValue>. Dari dua jenis generik, SortedDictionary<TKey,TValue> menawarkan performa yang lebih baik daripada SortedList<TKey,TValue>, sementara SortedList<TKey,TValue> mengonsumsi lebih sedikit memori.
ArrayList menyediakan suatu metode Sort yang menerima implementasi IComparer sebagai parameter. Rekan generiknya, List<T> kelas generik, menyediakan Sort metode yang mengambil implementasi IComparer<T> antarmuka generik sebagai parameter.
Apakah Anda memerlukan pencarian dan pengambilan informasi yang cepat?
- ListDictionary lebih cepat daripada Hashtable untuk koleksi kecil (10 item atau lebih sedikit). Kelas Dictionary<TKey,TValue> generik menyediakan pencarian yang lebih cepat daripada SortedDictionary<TKey,TValue> kelas generik. Implementasi multi-utas adalah ConcurrentDictionary<TKey,TValue>. ConcurrentBag<T> menyediakan penyisipan cepat multi-utas untuk data yang tidak diurutkan. Untuk informasi selengkapnya tentang kedua jenis multi-threaded, lihat Kapan Menggunakan Kumpulan Thread-Safe.
Apakah Anda memerlukan koleksi yang hanya menerima string?
StringCollection (berdasarkan IList) dan StringDictionary (berdasarkan IDictionary) berada di namespace System.Collections.Specialized.
Selain itu, Anda dapat menggunakan salah satu kelas koleksi generik di System.Collections.Generic namespace sebagai koleksi string yang di ketik dengan kuat dengan menentukan String kelas untuk argumen jenis generiknya. Misalnya, Anda dapat mendeklarasikan variabel menjadi jenis List<String> atau Dictionary<String,String>.
LINQ to Objects dan PLINQ
LINQ ke Objek memungkinkan pengembang menggunakan kueri LINQ untuk mengakses objek dalam memori selama jenis objek diterapkan IEnumerable atau IEnumerable<T>. Kueri LINQ menyediakan pola umum untuk mengakses data, biasanya lebih ringkas dan dapat dibaca daripada perulangan standar foreach , dan menyediakan kemampuan pemfilteran, pemesanan, dan pengelompokan. Untuk informasi selengkapnya, lihat LINQ ke Objek (C#) dan LINQ ke Objek (Visual Basic).
PLINQ menyediakan implementasi paralel LINQ ke Objek yang dapat menawarkan eksekusi kueri yang lebih cepat dalam banyak skenario, melalui penggunaan komputer multi-inti yang lebih efisien. Untuk informasi selengkapnya, lihat LINQ Paralel (PLINQ).