Podría ayudar a mirar a la definición de este método en C#, del artículo de MSDN que se refieren a:
public static IEnumerable<TResult> Select<TSource, TResult>(
this IEnumerable<TSource> source,
Func<TSource, TResult> selector
)
Los <
paréntesis angulares >
denotan los parámetros de tipo para este método genérico, y podemos comience a explorar el propósito del método simplemente mirando qué están haciendo los parámetros de tipo.
Comenzamos mirando el nombre del método genérico:
Select<TSource, TResult>
Esto nos dice que el método llamado Select
se ocupa de dos tipos diferentes:
- El tipo
TSource
; y
- El tipo
TResult
Veamos los parámetros:
- El primer parámetro es
IEnumerable<TSource> source
- una fuente, proporcionando una enumeración TSource
.
- El segundo parámetro es
Func<TSource, TResult> selector
- una función de selector que toma TSource
y lo convierte en TResult
. (Esto se puede comprobar mediante la exploración de la definición de Func
)
luego nos fijamos en su valor de retorno:
IEnumerable<TResult>
Ahora sabemos que este método devolverá una enumeración TResult
.
Para resumir, tenemos una función que toma una enumeración de TSource
, y una función de selección que se lleva individuales TSource
elementos y devuelve TResult
artículos, y luego toda la función de selección devuelve una enumeración de TResult
.
Un ejemplo:
Para poner esto en términos concretos, supongamos que TSource
es de tipo Person
(una clase que representa a una persona, con un nombre, edad, sexo, etc), y TResult
es de tipo String
(que representa el nombre de la persona). Vamos a dar a la función Select
una lista de Person
s, y una función que, dado un Person
seleccionará solo su nombre. Como resultado de llamar a esta función Select
, obtendremos una lista de String
que contiene solo los nombres de las personas.
Aparte:
La última pieza del rompecabezas de la firma del método original, en la parte superior, es el this
palabra clave antes de que el primer parámetro. Esto es parte de la sintaxis para definir Extension Methods, y todo lo que esencialmente significa es que en lugar de llamar al método Select estático (pasando su enumeración de origen y función de selector) puede invocar directamente el método Select en su enumeración, como si tenía un método Select
(y pasa solo un parámetro, la función de selector).
Espero que esto lo haga más claro para usted?
Gracias por esta respuesta detallada. ¿La palabra clave "Método" solo dice Enumerable.Select es un método? Supongo que me pregunto ¿cómo puedo descifrar alguna línea de ayuda como esta? –
Sí, eso es correcto. El título del tema de MSDN le indica el nombre del miembro, el tipo (método, propiedad, evento, campo) y, para los métodos sobrecargados, la firma de la sobrecarga que está mirando. (En el caso de Enumerable.Select, hay dos sobrecargas, que se distinguen por sus tipos de funciones de mapeo.) – itowlson