Enumerable.Select Metoda

Definice

Promítá každý prvek sekvence do nového formuláře.

Přetížení

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

Promítá každý prvek sekvence do nové podoby začleněním indexu elementu.

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

Promítá každý prvek sekvence do nového formuláře.

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

Promítá každý prvek sekvence do nové podoby začleněním indexu elementu.

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)

Parametry typu

TSource

Typ elementů .source

TResult

Typ hodnoty vrácené nástrojem selector.

Parametry

source
IEnumerable<TSource>

Posloupnost hodnot pro vyvolání transformační funkce.

selector
Func<TSource,Int32,TResult>

Transformační funkce, která se má použít pro každý zdrojový prvek; druhý parametr funkce představuje index elementu source.

Návraty

IEnumerable<TResult>

Objekt IEnumerable<T> , jehož elementy jsou výsledkem vyvolání transformační funkce u každého prvku objektu source.

Výjimky

source nebo selector je null.

Příklady

Následující příklad kódu ukazuje, jak použít Select<TSource,TResult>(IEnumerable<TSource>, Func<TSource,Int32,TResult>) k promítání přes posloupnost hodnot a použití indexu každého prvku.

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 }

Poznámky

Tato metoda se implementuje pomocí odloženého spuštění. Okamžitá návratová hodnota je objekt, který ukládá všechny informace potřebné k provedení akce. Dotaz reprezentovaný touto metodou není proveden, dokud objekt není výčet buď voláním jeho GetEnumerator metody přímo, nebo pomocí foreach v jazyce C# nebo For Each v jazyce Visual Basic.

První argument selector představuje prvek, který se má zpracovat. Druhý argument selector představuje nulový index tohoto prvku ve zdrojové sekvenci. To může být užitečné, pokud jsou prvky ve známém pořadí a chcete něco udělat s elementem v určitém indexu, například. Může být také užitečné, pokud chcete načíst index jednoho nebo více prvků.

Tato metoda projekce vyžaduje transformační funkci , selectorkterá vytvoří jednu hodnotu pro každou hodnotu ve zdrojové sekvenci, source. Pokud selector vrátí hodnotu, která je sama o sobě kolekcí, je na spotřebiteli, aby dílčí posloupnosti přecházely ručně. V takové situaci může být pro váš dotaz lepší vrátit jednu sloučenou sekvenci hodnot. Chcete-li toho dosáhnout, použijte SelectMany místo metody metodu Select. I když SelectMany funguje podobně Selectjako , liší se v tom, že transformační funkce vrátí kolekci, která se před vrácením rozbalí o SelectMany .

Platí pro

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

Promítá každý prvek sekvence do nového formuláře.

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)

Parametry typu

TSource

Typ elementů .source

TResult

Typ hodnoty vrácené nástrojem selector.

Parametry

source
IEnumerable<TSource>

Posloupnost hodnot pro vyvolání transformační funkce.

selector
Func<TSource,TResult>

Transformační funkce, která se má použít pro každý prvek.

Návraty

IEnumerable<TResult>

Objekt IEnumerable<T> , jehož elementy jsou výsledkem vyvolání transformační funkce u každého prvku objektu source.

Výjimky

source nebo selector je null.

Příklady

Následující příklad kódu ukazuje, jak použít Select<TSource,TResult>(IEnumerable<TSource>, Func<TSource,TResult>) k promítání na sekvenci hodnot.

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

Poznámky

Tato metoda se implementuje pomocí odloženého spuštění. Okamžitá návratová hodnota je objekt, který ukládá všechny informace potřebné k provedení akce. Dotaz reprezentovaný touto metodou není proveden, dokud objekt není výčet buď voláním jeho GetEnumerator metody přímo, nebo pomocí foreach v jazyce C# nebo For Each v jazyce Visual Basic.

Tato metoda projekce vyžaduje transformační funkci , selectorkterá vytvoří jednu hodnotu pro každou hodnotu ve zdrojové sekvenci, source. Pokud selector vrátí hodnotu, která je sama o sobě kolekcí, je na spotřebiteli, aby dílčí posloupnosti přecházely ručně. V takové situaci může být pro váš dotaz lepší vrátit jednu sloučenou sekvenci hodnot. Chcete-li toho dosáhnout, použijte SelectMany místo metody metodu Select. I když SelectMany funguje podobně Selectjako , liší se v tom, že transformační funkce vrátí kolekci, která se před vrácením rozbalí o SelectMany .

V syntaxi výrazu select dotazu se klauzule (C#) nebo Select (Visual Basic) překládá na vyvolání výrazu Select.

Viz také

Platí pro