Selecionando uma Classe de Coleção
Certifique-se de escolher a sua classe de coleção cuidadosamente. Usar o tipo errado pode restringir o uso de coleção. Em geral, evite usar os tipos na System.Collections namespace, a menos que especificamente direcionadas.NET Framework versão 1.1. As versões genéricas e simultâneas das coleções deverão ser preferido devido à sua maior segurança de tipo e outras melhorias.
Considere as seguintes questões:
Você precisa de uma lista sequencial onde o elemento normalmente será descartado após seu valor ser recuperado?
Se Sim, considere o uso de Queue classe ou o Queue<T> classe genérica, se você precisar first in, First-out (FIFO) comportamento. Considere o uso de Stack classe ou o Stack<T> classe genérica, se você precisar última-in, First-out (LIFO) de comportamento. Para obter acesso seguro de vários threads, use as versões simultâneas ConcurrentQueue<T> e ConcurrentStack<T>.
Caso contrário, considere o uso de outras coleções.
Você precisa acessar os elementos em uma determinada ordem, tais como PEPS, UEPS, ou aleatório?
O Queue classe e o Queue<T> ou ConcurrentQueue<T> classe genérica oferecem acesso de FIFO. Para obter mais informações, consulte Quando usar uma coleção de Thread-Safe..
O Stack classe e o Stack<T> ou ConcurrentStack<T> classe genérica oferecem UEPS acesso. Para obter mais informações, consulte Quando usar uma coleção de Thread-Safe..
O LinkedList<T> classe genérica permite acesso seqüencial do cabeçalho de Laço, ou a cauda a cabeça.
Você precisa acessar cada elemento pelo índice?
As classes ArrayList e StringCollection e a classe genérica List<T> oferecem acesso aos seus elementos pelo índice com base zero do elemento.
As classes Hashtable, SortedList, ListDictionary, e StringDictionary, e as classes genéricas Dictionary<TKey, TValue> e SortedDictionary<TKey, TValue> oferecem acesso a seus elementos pela chave do elemento.
As classes NameObjectCollectionBase e NameValueCollection e as classes genéricas KeyedCollection<TKey, TItem> e SortedList<TKey, TValue>oferecem acesso aos seus elementos tanto pelo índice com base zero quanto pela chave do elemento.
Cada elemento conterá um valor, uma combinação de uma chave e um valor, ou uma combinação de uma chave e vários valores?
Um valor: Usar qualquer uma das coleções baseadas o IList interface ou o IList<T> interface genérica.
Uma chave e um valor: Usar qualquer uma das coleções baseadas o IDictionary interface ou o IDictionary<TKey, TValue> interface genérica.
Um valor com chave incorporado: Use o KeyedCollection<TKey, TItem> classe de genéricos.
Uma chave e valores múltiplos: Use o NameValueCollection classe.
Você precisa classificar os elementos de forma diferente de como eles foram inseridos?
A classe Hashtable classifica seus elementos por seus códigos hash.
A classe SortedList e as classes genéricas SortedDictionary<TKey, TValue> e SortedList<TKey, TValue> classificam seus elementos pela chave, com base em implementações da interface IComparer da interface genérica IComparer<T>.
ArrayList fornece um método Sort que leva uma implementação IComparer como um parâmetro. Sua contraparte genérica, a classe genérica List<T>, fornece um método Sort que leva uma implementação da interface genérica IComparer<T> como um parâmetro.
Você precisa de pesquisas rápidas e recuperação de informações?
- ListDictionary é mais rápido do que Hashtable para coleções pequenas (10 itens ou menos). A classe genérica Dictionary<TKey, TValue> oferece pesquisa mais rápida do que a classe genérica SortedDictionary<TKey, TValue>. A implementação de vários segmentos é ConcurrentDictionary<TKey, TValue>. ConcurrentBag<T>oferece rápida inserção de vários segmentos para dados não ordenados. Para obter mais informações sobre os dois tipos de vários segmentos, consulte Quando usar uma coleção de Thread-Safe..
Você precisa de coleções que aceitem apenas sequências de caracteres?
StringCollection(com base em IList) e StringDictionary (com base em IDictionary) estão na System.Collections.Specialized namespace.
Além disso, você pode usar qualquer uma das classes de coleção genéricas no namespace System.Collections.Generic como coleções de sequência de caracteres com rigidez de tipos especificando a classe String para seus argumentos de tipo genéricos.
LINQ to Objects e PLINQ
LINQ to Objects permitem aos desenvolvedores usar consultas LINQ para acessar objetos em memória, como o tipo de objeto implementa IEnumerable ou IEnumerable<T>. Consultas LINQ fornecem um padrão comum para acessar dados, são geralmente mais conciso e legível do que o padrão foreach loops e fornecer a filtragem, classificação e agrupar recursos. Para obter mais informações, consulte LINQ para Objetos.
PLINQ fornece uma implementação paralela de LINQ to Objects pode oferecer a execução de consulta mais rápida em muitos cenários, por meio do uso mais eficiente dos computadores de vários núcleos. Para obter mais informações, consulte Parallel LINQ PLINQ).
Consulte também
Referência
System.Collections.Specialized