Enumerable.Select Método

Definición

Proyecta cada elemento de una secuencia a un nuevo formulario.

Sobrecargas

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>)

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.

public:
generic <typename TSource, typename TResult>
[System::Runtime::CompilerServices::Extension]
 static System::Collections::Generic::IEnumerable<TResult> ^ Select(System::Collections::Generic::IEnumerable<TSource> ^ source, Func<TSource, TResult> ^ selector);
public static System.Collections.Generic.IEnumerable<TResult> Select<TSource,TResult> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,TResult> selector);
static member Select : seq<'Source> * Func<'Source, 'Result> -> seq<'Result>
<Extension()>
Public Function Select(Of TSource, TResult) (source As IEnumerable(Of TSource), selector As Func(Of TSource, TResult)) As IEnumerable(Of TResult)

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.

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
*/
' Create a collection of sequential integers
' from 1 to 10 and project their squares.
Dim squares As IEnumerable(Of Integer) =
Enumerable.Range(1, 10).Select(Function(x) x * x)

Dim output As New System.Text.StringBuilder
For Each num As Integer In squares
    output.AppendLine(num)
Next

' Display the output.
Console.WriteLine(output.ToString())

' 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 mediante una llamada a su GetEnumerator método directamente o mediante foreach en Visual 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 (Visual C#) o Select (Visual Basic) se traduce en una invocación de Select.

Consulte también

Se aplica a

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

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

public:
generic <typename TSource, typename TResult>
[System::Runtime::CompilerServices::Extension]
 static System::Collections::Generic::IEnumerable<TResult> ^ Select(System::Collections::Generic::IEnumerable<TSource> ^ source, Func<TSource, int, TResult> ^ selector);
public static System.Collections.Generic.IEnumerable<TResult> Select<TSource,TResult> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,int,TResult> selector);
static member Select : seq<'Source> * Func<'Source, int, 'Result> -> seq<'Result>
<Extension()>
Public Function Select(Of TSource, TResult) (source As IEnumerable(Of TSource), selector As Func(Of TSource, Integer, TResult)) As IEnumerable(Of TResult)

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.

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}
*/
' Create an array of strings.
Dim fruits() As String =
{"apple", "banana", "mango", "orange", "passionfruit", "grape"}

' Project each item in the array to an anonymous type
' that stores the item's index in the array and
' a substring of each item whose length is equal
' to the index position in the original array.
Dim query =
fruits.Select(Function(fruit, index) _
                  New With {index, .Str = fruit.Substring(0, index)})

Dim output As New System.Text.StringBuilder
For Each obj In query
    output.AppendLine(obj.ToString())
Next

' Display the output.
Console.WriteLine(output.ToString())

' 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 mediante una llamada a su GetEnumerator método directamente o mediante foreach en Visual 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