Delegados genéricos para manipular matrices y listas
Actualización: noviembre 2007
En este tema se ofrece información general sobre los delegados genéricos en conversiones, predicados de búsqueda y acciones que se van a realizar en los elementos de una matriz o colección.
Delegados genéricos para manipular matrices y listas
El delegado genérico Action<T> representa un método que realiza alguna acción en un elemento del tipo especificado. Puede crear un método que lleva a cabo la acción deseada en el elemento, crear una instancia del delegado Action<T> para representar ese método y después pasar la matriz y el delegado la método genérico estático Array.ForEach<T>. Por cada elemento de la matriz se realiza una llamada al método.
La clase genérica List<T> también proporciona un método ForEach que utiliza el delegado Action<T>. Este método no es genérico.
Nota: |
---|
Esto pone de manifiesto un punto interesante sobre los tipos y métodos genéricos. El método Array.ForEach<T> debe ser estático (Shared en Visual Basic) y genérico porque Array no es un tipo genérico; el único motivo por el que puede especificar un tipo en el que puede operar Array.ForEach<T> es que el método tiene su propia lista de parámetros. Por contraste, el método no genérico List<T>.ForEach pertenece a la clase genérica List<T>, por lo que simplemente utiliza el parámetro de tipo de su clase. La clase tiene establecimiento inflexible de tipos, por lo que el método puede ser un método de instancia. |
El delegado genérico Predicate<T> representa un método que determina si un determinado elemento cumple los criterios que se hayan definido. Puede utilizarlo con los siguientes métodos genéricos estáticos de Array para buscar un elemento o un conjunto de elementos: Exists<T>, Find<T>, FindAll<T>, FindIndex, FindLast<T>, FindLastIndex y TrueForAll<T>.
Predicate<T> también funciona con los correspondientes métodos de instancia no genéricos de la clase genérica List<T>.
El delegado genérico Comparison<T> le permite proporcionar un criterio de ordenación para los elementos de matriz o lista que no tienen un orden de clasificación nativo o para reemplazar el criterio de ordenación nativo. Cree un método que realice la comparación, cree una instancia del delegado Comparison<T> para representar su método y, a continuación, pase la matriz y el delegado al método genérico estático Array.Sort<T>(array<T[], Comparison<T>). La clase genérica List<T> proporciona una sobrecarga del método de instancia correspondiente, List<T>.Sort(Comparison<T>).
El delegado genérico Converter<TInput, TOutput> le permite definir una conversión entre dos tipos y convertir una matriz de un tipo en una matriz del otro tipo, o convertir una lista de un tipo en una lista de otro tipo. Cree un método que convierta los elementos de la lista existente en un nuevo tipo, cree una instancia de delegado para representar el método y utilice el método estático genérico Array.ConvertAll<TInput, TOutput> para producir una matriz del nuevo tipo a partir de la matriz original, o el método de instancia genérico List<T>.ConvertAll<TOutput> para producir una lista del nuevo tipo a partir de la lista original.
Encadenar delegados
Muchos de los métodos que utilizan estos delegados devuelven una matriz o una lista que se puede pasar a otro método. Por ejemplo, si desea seleccionar determinados elementos de una matriz, conviértalos a un nuevo tipo y guárdelos en una nueva matriz; puede pasar la matriz devuelta por el método genérico FindAll<T> al método genérico ConvertAll<TInput, TOutput>. Si el nuevo tipo de elemento carece de un criterio de ordenación natural, puede pasar la matriz devuelta por el método genérico ConvertAll<TInput, TOutput> al método genérico Sort<T>(array<T[], Comparison<T>).
Vea también
Conceptos
Información general sobre los genéricos de .NET Framework
Colecciones genéricas en .NET Framework
Ventajas y limitaciones de genéricos
Referencia
System.Collections.ObjectModel