Delegados genéricos para manipular matrizes e listas

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

Delegados genéricos para manipular matrizes e listas

O Action<T> delegado genérico 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 Action<T> delegado para representar esse método e, em seguida, passar a matriz e o delegado para o Array.ForEach método genérico estático. O método é chamado para cada elemento da matriz.

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

Nota

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

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

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

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

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

Encadeamento de delegados

Muitos 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 de uma matriz, converter esses elementos em um novo tipo e salvá-los em uma nova matriz, você pode passar a matriz retornada FindAll pelo método genérico para o ConvertAll método genérico. Se o novo tipo de elemento não tiver uma ordem de classificação natural, você poderá passar a matriz retornada ConvertAll pelo método genérico para o Sort<T>(T[], Comparison<T>) método genérico.

Consulte também