Coleções genéricas no .NET

A biblioteca de classes do .NET fornece várias classes de coleção genérica nos namespaces System.Collections.Generic e System.Collections.ObjectModel. Para obter informações detalhadas sobre essas classes, consulte Tipos de coleção comumente usados.

System.Collections.Generic

Muitos dos tipos de coleção genéricos são diretamente análogos aos tipos não genéricos. Dictionary<TKey,TValue> é uma versão genérica de Hashtable; ele usa a estrutura genérica KeyValuePair<TKey,TValue> para enumeração em vez de DictionaryEntry.

List<T> é uma versão genérica de ArrayList. Há classes Queue<T> e Stack<T> genéricas que correspondem às versões não genéricas.

Há versões genéricas e não genéricas de SortedList<TKey,TValue>. As duas versões são híbridas de um dicionário e de uma lista. A classe genérica SortedDictionary<TKey,TValue> é um dicionário puro e não tem nenhum equivalente não genérico.

A classe genérica LinkedList<T> é uma verdadeira lista vinculada. Não tem nenhum equivalente não genérico.

System.Collections.ObjectModel

A classe genérica Collection<T> fornece uma classe base para derivar seus próprios tipos de coleção genérica. A classe ReadOnlyCollection<T> fornece uma maneira fácil de produzir uma coleção somente leitura de qualquer tipo que implementa a interface genérica IList<T>. A classe genérica KeyedCollection<TKey,TItem> fornece uma maneira de armazenar objetos que contêm suas próprias chaves.

Outros tipos genéricos

A estrutura genérica Nullable<T> permite que você use tipos de valor como se eles pudessem ser atribuídos null. Isso pode ser útil ao trabalhar com consultas de banco de dados, nas quais os campos que contêm tipos de valor podem estar ausentes. O parâmetro de tipo genérico pode ser qualquer tipo de valor.

Observação

No C# e Visual Basic não é necessário usar Nullable<T> explicitamente, pois a linguagem tem sintaxe para tipos que permitem valor nulo. Consulte Tipos que permitem valor nulo (Guia de programação em C#) e Tipos de valor que permitem valor nulo (Visual Basic).

A estrutura genérica ArraySegment<T> fornece uma maneira de delimitar um intervalo de elementos dentro de uma matriz unidimensional baseada em zero de qualquer tipo. O parâmetro de tipo genérico é o tipo dos elementos da matriz.

O delegado genérico EventHandler<TEventArgs> elimina a necessidade de declarar um tipo de delegado para manipular eventos, se o evento seguir o padrão de manipulação de eventos usado por .NET. Por exemplo, vamos supor que você tenha criado uma classe MyEventArgs, derivada de EventArgs, para manter os dados para o evento. Em seguida, você pode declarar o evento da seguinte maneira:

public:
    event EventHandler<MyEventArgs^>^ MyEvent;
public event EventHandler<MyEventArgs> MyEvent;
Public Event MyEvent As EventHandler(Of MyEventArgs)

Confira também