Leer en inglés

Compartir a través de


Enumerable.Select Método

Definición

Proyecta cada elemento de una secuencia a un nuevo formulario.

Sobrecargas

Select<TSource,TResult>(IEnumerable<TSource>, Func<TSource,Int32,TResult>)

Proyecta cada elemento de una secuencia en un nuevo formulario incorporando el índice del elemento.

Select<TSource,TResult>(IEnumerable<TSource>, Func<TSource,TResult>)

Proyecta cada elemento de una secuencia a un nuevo formulario.

Select<TSource,TResult>(IEnumerable<TSource>, Func<TSource,Int32,TResult>)

Source:
Select.cs
Source:
Select.cs
Source:
Select.cs

Proyecta cada elemento de una secuencia en un nuevo formulario incorporando el índice del elemento.

C#
public static System.Collections.Generic.IEnumerable<TResult> Select<TSource,TResult> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,int,TResult> selector);

Parámetros de tipo

TSource

Tipo de los elementos de source.

TResult

Tipo de valor devuelto por selector.

Parámetros

source
IEnumerable<TSource>

Secuencia de valores sobre la que se va a invocar una función de transformación.

selector
Func<TSource,Int32,TResult>

Función de transformación que se va a aplicar a cada elemento de origen; el segundo parámetro de la función representa el índice del elemento de origen.

Devoluciones

IEnumerable<TResult>

IEnumerable<T> cuyos elementos son el resultado de invocar una función de transformación en cada elemento de source.

Excepciones

source o selector es null.

Ejemplos

En el ejemplo de código siguiente se muestra cómo usar Select<TSource,TResult>(IEnumerable<TSource>, Func<TSource,Int32,TResult>) para proyectar en una secuencia de valores y usar el índice de cada elemento.

C#
string[] fruits = { "apple", "banana", "mango", "orange",
                      "passionfruit", "grape" };

var query =
    fruits.Select((fruit, index) =>
                      new { index, str = fruit.Substring(0, index) });

foreach (var obj in query)
{
    Console.WriteLine("{0}", obj);
}

/*
 This code produces the following output:

 { index = 0, str =  }
 { index = 1, str = b }
 { index = 2, str = ma }
 { index = 3, str = ora }
 { index = 4, str = pass }
 { index = 5, str = grape }
*/

Comentarios

Este método se implementa mediante la ejecución diferida. El valor devuelto inmediato es un objeto que almacena toda la información necesaria para realizar la acción. La consulta representada por este método no se ejecuta hasta que el objeto se enumera llamando directamente a su GetEnumerator método o mediante foreach en C# o For Each en Visual Basic.

Primer argumento que selector representa el elemento que se va a procesar. Segundo argumento que selector representa el índice de base cero de ese elemento en la secuencia de origen. Esto puede ser útil si los elementos están en un orden conocido y desea hacer algo con un elemento en un índice determinado, por ejemplo. También puede ser útil si desea recuperar el índice de uno o varios elementos.

Este método de proyección requiere la función de transformación, selector, para generar un valor para cada valor de la secuencia de origen, source. Si selector devuelve un valor que es en sí misma una colección, el consumidor debe recorrer manualmente las subsecuencias. En tal situación, podría ser mejor que la consulta devuelva una única secuencia de valores combinado. Para ello, use el SelectMany método en lugar de Select. Aunque SelectMany funciona de forma similar a Select, difiere en que la función de transformación devuelve una colección que luego se expande antes SelectMany de que se devuelva.

Se aplica a

.NET 9 y otras versiones
Producto Versiones
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

Select<TSource,TResult>(IEnumerable<TSource>, Func<TSource,TResult>)

Source:
Select.cs
Source:
Select.cs
Source:
Select.cs

Proyecta cada elemento de una secuencia a un nuevo formulario.

C#
public static System.Collections.Generic.IEnumerable<TResult> Select<TSource,TResult> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,TResult> selector);

Parámetros de tipo

TSource

Tipo de los elementos de source.

TResult

Tipo de valor devuelto por selector.

Parámetros

source
IEnumerable<TSource>

Secuencia de valores sobre la que se va a invocar una función de transformación.

selector
Func<TSource,TResult>

Función de transformación que se va a aplicar a cada elemento.

Devoluciones

IEnumerable<TResult>

IEnumerable<T> cuyos elementos son el resultado de invocar una función de transformación en cada elemento de source.

Excepciones

source o selector es null.

Ejemplos

En el ejemplo de código siguiente se muestra cómo usar Select<TSource,TResult>(IEnumerable<TSource>, Func<TSource,TResult>) para proyectar en una secuencia de valores.

C#
IEnumerable<int> squares =
    Enumerable.Range(1, 10).Select(x => x * x);

foreach (int num in squares)
{
    Console.WriteLine(num);
}
/*
 This code produces the following output:

 1
 4
 9
 16
 25
 36
 49
 64
 81
 100
*/

Comentarios

Este método se implementa mediante la ejecución diferida. El valor devuelto inmediato es un objeto que almacena toda la información necesaria para realizar la acción. La consulta representada por este método no se ejecuta hasta que el objeto se enumera llamando directamente a su GetEnumerator método o mediante foreach en C# o For Each en Visual Basic.

Este método de proyección requiere la función de transformación, selector, para generar un valor para cada valor de la secuencia de origen, source. Si selector devuelve un valor que es en sí misma una colección, el consumidor debe recorrer manualmente las subsecuencias. En tal situación, podría ser mejor que la consulta devuelva una única secuencia de valores combinado. Para ello, use el SelectMany método en lugar de Select. Aunque SelectMany funciona de forma similar a Select, difiere en que la función de transformación devuelve una colección que luego se expande antes SelectMany de que se devuelva.

En la sintaxis de expresión de consulta, una select cláusula (C#) o Select (Visual Basic) se traduce en una invocación de Select.

Consulte también

Se aplica a

.NET 9 y otras versiones
Producto Versiones
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0