Selecionando uma Classe de Coleção
Não se esqueça de escolher sua classe System.Collections com cuidado.Usar o tipo errado pode restringir o uso de coleção.
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 da classe Queue ou da classe genérica Queue<T> se você precisar de comportamento primeiro a entrar, primeiro a sair (PEPS).Considere usar a classe Stack ou a classe genérica Stack<T> se você precisar de comportamento último a entrar, primeiro a sair (UEPS).
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?
A classe Queue e a classe genérica Queue<T> oferecem acesso PEPS.
A classe Stack e a classe genérica Stack<T> oferecem acesso UEPS.
A classe genérica LinkedList<T> permite acesso sequencial tanto do início para o fim quanto do fim para o início.
O restante das coleções oferece acesso aleatório.
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: Use qualquer uma das coleções com base na IList interface ou a IList<T> interface genérica.
Uma chave e um valor: Use qualquer uma das coleções com base na IDictionary interface ou a IDictionary<TKey, TValue> interface genérica.
Um valor com chave incorporado: Use o KeyedCollection<TKey, TItem> classe genérica.
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>.
Você precisa de coleções que aceitem apenas sequências de caracteres?
StringCollection (baseado no IList) e StringDictionary (baseado no IDictionary) estão no namespace System.Collections.Specialized.
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 para Objetos
LINQ to Objects permite aos desenvolvedores usar consultas LINQ para acessar objetos na memória, desde que o tipo de objeto implemente IEnumerable ou IEnumerable<T>.Consultas LINQ fornecem um padrão comum para acessar dados, são geralmente mais concisas e legíveis que loops foreach padrão e fornecem recursos de filtragem, classificação e agrupamento.Além disso, consultas LINQ também podem gerar melhora de desempenho.Para obter mais informações, consulte LINQ para Objetos.
Consulte também
Referência
System.Collections.Specialized