Definindo Coleções
Uma coleção é um conjunto de objetos tipados da mesma forma que são agrupados.
Objetos de qualquer tipo podem ser agrupados em uma coleção única do tipo Object para tirar proveito dos construtores que são inerentes a linguagem. Por exemplo, a instrução foreach do C# ( for eachno Visual Basic) espera que todos os objetos na coleção sejam de um Único Tipo.
No entanto, em uma coleção do tipo Object, processamento adicional é feito nos elementos individualmente, tais como conversão boxing e unboxing, que afetam o desempenho da coleção. Conversões boxing e unboxing ocorrem normalmente se armazenar ou recuperar um tipo de valor em uma coleção do tipo Object.
Coleções genéricas, como List<T>, e coleções não genéricas fortemente tipadas, como StringCollection, evitam essas ocorrências de desempenho se o tipo de elemento é o tipo que a coleção pretende ter (por exemplo, armazenando ou recuperando sequências de caracteres de um StringCollection). Além disso, coleções fortemente tipadas automaticamente executam validação de tipo de cada elemento adicionado à coleção. Por esses motivos, é altamente recomendável que você use classes de coleção genérica, sempre que possível.
Todas as coleções que direta ou indiretamente implementam a interface ICollection ou a interface genérica ICollection<T> compartilham vários recursos, bem como os métodos que adicionam, removem ou pesquisam elementos:
Um enumerador.
Um enumerador é um objeto que executa iterações através de sua coleção associada. Ele pode ser considerado como um ponteiro móvel para qualquer elemento na coleção. Um enumerador pode ser associado com somente uma coleção, mas uma coleção pode ter vários enumeradores. A instrução foreach do C# (for each no Visual Basic) usa o enumerador e oculta a complexidade da manipulação de enumerador.
Sincronização de membros (System.Collections classes somente).
Sobre os tipos de coleção herdados na System.Collections namespace, sincronização fornece algum grau de segurança do thread ao acessar os elementos da coleção. As coleções não apresentam segurança de segmentos por padrão. Se precisar de acesso de vários segmentos dimensionável e eficiente a uma coleção, use uma das classes na System.Collections.Concurrent namespace. Para obter mais informações, consulte Coleções de thread-Safe..
Apenas algumas classes nos namespaces System.Collections fornecem um método Synchronize que cria um wrapper com segurança de segmentos através da coleção. No entanto, todas as classes em todos os namespaces System.Collections fornecem uma propriedade SyncRoot que pode ser usada por classes derivadas para criar seu próprios wrappers com segurança de segmentos. Uma propriedade IsSynchronized também é fornecida para determinar se a coleção tem segurança de segmentos. A sincronização não está disponível na interface genérica ICollection<T>.
O CopyTo método.
Todas as coleções podem ser copiadas para uma matriz usando o método CopyTo; no entanto, a ordem dos elementos na nova matriz se baseia na sequência em que o enumerador os retorna. A matriz resultante é sempre unidimensional com um limite inferior de zero.
Observe que a interface genérica ICollection<T> possui membros adicionais, que não incluem a interface não genérica.
Os seguintes recursos são implementados em algumas classes no namespace System.Collections:
Capacidade e contagem.
A capacidade de uma coleção é o número de elementos que ele pode conter. A contagem de uma coleção é o número de elementos que ele realmente contém. Um BitArray é um caso especial; sua capacidade é o mesmo que seu comprimento, que é o mesmo que a contagem. Algumas coleções ocultam a capacidade ou a contagem ou ambos.
Todas as coleções se expandirá automaticamente na capacidade quando a capacidade atual é alcançada. A memória é realocada, e os elementos são copiados da coleção antiga para a nova. Isso reduz o código necessário para usar a coleção; no entanto, o desempenho da coleção pode ainda ser negativamente afetado. A melhor maneira para evitar desempenho ruim causado por várias realocações é definir a capacidade inicial a ser o tamanho estimado da coleção.
Limite inferior.
O limite inferior de uma coleção é o índice do seu primeiro elemento. Todos indexados collections in a System.Collections namespaces têm um limite inferior zero. Arraytem um limite inferior zero por padrão, mas o limite inferior diferente podem ser definido ao criar uma instância da matriz classe usando CreateInstance.
Classes System.Collections geralmente podem ser categorizadas em três tipos:
Coleção comumente usadas.
Essas são as variações comuns de dados de coleções, como tabelas de hash, filas, pilhas, dicionários e listas. Muitas coleções utilizadas têm versões não genérico, versões genéricas e versões genéricas de thread-safe.
Coleções de bits
Coleções de bits são coleções cujos elementos são sinalizadores de bit. Elas se comportam de maneira ligeiramente diferente das outras coleções.
Coleções Especializadas
São coleções com finalidades extremamente específicas, geralmente para manipular um tipo específico de elemento, como StringDictionary.
Não se esqueça de escolher cuidadosamente uma classe de coleção. Como cada coleção tem sua própria funcionalidade, cada uma também tem suas próprias limitações. Quanto mais especializada a coleção é, mais limitada ela é. Para obter dicas sobre como escolher uma coleção, consulte Selecionando uma classe de coleção.
Consulte também
Referência
System.Collections.Specialized