Representantes Genéricos para Manipulação de Matrizes e Listas

Este tópico fornece uma visão geral dos representantes genéricos para conversões, predicados de pesquisa e ações a serem tomadas nos elementos de uma matriz ou coleção.

Representantes Genéricos para Manipulação de Matrizes e Listas

O delegado genérico Action<T> representa um método que executa alguma ação em um elemento do tipo especificado. Você pode criar um método que executa a ação desejada no elemento, criar uma instância do representante Action<T> para representar esse método e, em seguida, passa a matriz e o representante para o método estado genérico Array.ForEach<T>. O método é chamado para cada elemento da matriz.

A classe genérica List<T> também fornece um método ForEach que usa o representante Action<T>. Este método não é genérico.

Observação

Isso é um ponto interessante sobre tipos genéricos e métodos.O método Array.ForEach<T> deve ser estático (Shared no Visual Basic) e genérico porque Array não é um tipo genérico; a única razão para você poder especificar um tipo de Array.ForEach<T> para operar é que o método tenha sua própria lista de parâmetros de tipos.Por outro lado, o método não genérico List<T>.ForEach pertence à classe genérica List<T>, portanto, ele simplesmente usa o parâmetro do tipo de sua classe.A classe é fortemente tipada, portanto, o método pode ser um método de instância.

O delegado genérico Predicate<T> representa um método que determina se um determinado elemento atende aos critérios que você definir. Você pode usá-lo com os seguintes métodos genéricos estáticos de Array para pesquisar um elemento ou um conjunto de elementos: Exists<T>, Find<T>, FindAll<T>, FindIndex, FindLast<T>, FindLastIndex, and TrueForAll<T>.

Predicate<T> também funciona com os correspondentes métodos de instâcia não genéricos da classe genérica List<T>.

O delegado genérico Comparison<T> permite a você fornecer uma ordem de classificação para matriz ou lista de elementos que não têm um ordem de classificação nativa, ou para substituir a ordem de classificação nativa. Crie um método que realize a comparação, crie uma instância do delegado Comparison<T> para representar o método e, em seguida, passe a matriz e o delegado para o método estático genérico.Array.Sort<T>(T[], Comparison<T>). A classe genérica List<T> fornece uma sobrecarga do correspondente método de instância, List<T>.Sort(Comparison<T>).

O delegado genérico Converter<TInput, TOutput> permite que você defina uma conversão entre dois tipos e converta uma matriz de um tipo em uma matriz do outro, ou converta uma lista de um tipo em uma lista d outro. Crie um método que converta os elementos de uma lista existente para um novo tipo, crie uma instância para representar o método e use o método estático genérico Array.ConvertAll<TInput, TOutput> para produzir uma matriz do novo tipo a partir da matriz original, ou o método de instância genérico List<T>.ConvertAll<TOutput> para produzir uma lista do novo tipo a partir da lista original.

Encadeando representantes

Muitas dos métodos que usam esses delegados retornam uma matriz ou Lista, que pode ser passada para outro método. Por exemplo, se você quiser selecionar determinados elementos da matriz, converter esses elementos em um novo tipo e salvá-las em uma nova matriz, você pode passar a matriz retornada pelo método genérico FindAll<T> para o método genérico ConvertAll<TInput, TOutput>. Se o novo tipo de elemento não possui um ordem de classificação natural, você pode passar a matriz retornada pelo método genérico ConvertAll<TInput, TOutput> para método genérico Sort<T>(T[], Comparison<T>).

Consulte também

Referência

System.Collections.Generic

System.Collections.ObjectModel

Conceitos

Classes genéricas no .NET Framework

Coleções Genéricas na .NET Framework

Interfaces Genéricas

Vantagens e Limitações dos Genéricos

Covariância e/contravariância no genéricos