Partilhar via


Quando usar coleções genéricas

O uso de coleções genéricas oferece o benefício automático da segurança de tipo sem ter que derivar de um tipo de coleção base e implementar membros específicos do tipo. Os tipos de coleção genéricos também geralmente têm um desempenho melhor do que os tipos de coleção não genéricos correspondentes (e melhor do que os tipos derivados de tipos de coleção base não genéricos) quando os elementos de coleção são tipos de valor, porque com genéricos, não há necessidade de encaixotar os elementos.

Para programas destinados ao System.Collections.Concurrent .NET Standard 1.0 ou posterior, use as classes de coleção genéricas no namespace quando vários threads puderem estar adicionando ou removendo itens da coleção simultaneamente. Além disso, quando a imutabilidade for desejada, considere as classes de coleção genéricas no System.Collections.Immutable namespace.

Os seguintes tipos genéricos correspondem aos tipos de coleção existentes:

Tipos Adicionais

Vários tipos de coleção genérica não têm contrapartidas não genéricas. Entre eles, incluem-se:

Construtores imutáveis

Quando você deseja a funcionalidade de imutabilidade em seu aplicativo, o System.Collections.Immutable namespace oferece tipos de coleção genéricos que você pode usar. Todos os tipos de coleção imutáveis oferecem Builder classes que podem otimizar o desempenho quando você está executando várias mutações. A Builder classe agrupa operações em um estado mutável. Quando todas as mutações tiverem sido concluídas, chame o ToImmutable método para "congelar" todos os nós e crie uma coleção genérica imutável, por exemplo, um ImmutableList<T>.

O Builder objeto pode ser criado chamando o método não genérico CreateBuilder() . A partir de uma Builder instância, você pode chamar ToImmutable(). Da mesma forma, a partir da Immutable* coleção, você pode chamar ToBuilder() para criar uma instância do construtor a partir da coleção imutável genérica. Seguem-se os vários Builder tipos.

LINQ para objetos

O recurso LINQ to Objects permite que você use consultas LINQ para acessar objetos na memória, desde que o tipo de objeto implemente a System.Collections.IEnumerable interface ou System.Collections.Generic.IEnumerable<T> . As consultas LINQ fornecem um padrão comum para acessar dados; são normalmente mais concisos e legíveis do que os loops padrão foreach e fornecem recursos de filtragem, ordenação e agrupamento. As consultas LINQ também podem melhorar o desempenho. Para obter mais informações, consulte LINQ to Objects (C#), LINQ to Objects (Visual Basic) e Parallel LINQ (PLINQ).

Funcionalidade Adicional

Alguns dos tipos genéricos têm funcionalidade que não é encontrada nos tipos de coleção não genéricos. Por exemplo, a List<T> classe, que corresponde à classe não genérica ArrayList , tem vários métodos que aceitam delegados genéricos, como o Predicate<T> delegado que permite especificar métodos para pesquisar a lista, o Action<T> delegado que representa métodos que atuam em cada elemento da lista e o Converter<TInput,TOutput> delegado que permite definir conversões entre tipos.

A List<T> classe permite que você especifique suas próprias IComparer<T> implementações de interface genéricas para classificar e pesquisar a lista. As SortedDictionary<TKey,TValue> classes e SortedList<TKey,TValue> também têm essa capacidade. Além disso, essas classes permitem especificar comparadores quando a coleção é criada. Da mesma forma, as Dictionary<TKey,TValue> classes e KeyedCollection<TKey,TItem> permitem que você especifique seus próprios comparadores de igualdade.

Consulte também