Enumerable.Select Metoda

Definicja

Projektuje każdy element sekwencji w nowym formularzu.

Przeciążenia

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

Projektuje każdy element sekwencji w nowym formularzu, dołączając indeks elementu.

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

Projektuje każdy element sekwencji w nowym formularzu.

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

Projektuje każdy element sekwencji w nowym formularzu, dołączając indeks 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ów elementu source.

TResult

Typ wartości zwróconej przez selector.

Parametry

source
IEnumerable<TSource>

Sekwencja wartości do wywołania funkcji transform na.

selector
Func<TSource,Int32,TResult>

Funkcja przekształcania, która ma być stosowana do każdego elementu źródłowego; drugi parametr funkcji reprezentuje indeks elementu źródłowego.

Zwraca

IEnumerable<TResult>

Element IEnumerable<T> , którego elementy są wynikiem wywołania funkcji transform na każdym elemecie source.

Wyjątki

source lub selector to null.

Przykłady

W poniższym przykładzie kodu pokazano, jak używać Select<TSource,TResult>(IEnumerable<TSource>, Func<TSource,Int32,TResult>) metody do tworzenia projektu w sekwencji wartości i używania indeksu każdego elementu.

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 }

Uwagi

Ta metoda jest implementowana za pomocą odroczonego wykonania. Bezpośrednio zwracana wartość jest obiektem, który przechowuje wszystkie informacje wymagane do wykonania akcji. Zapytanie reprezentowane przez tę metodę nie jest wykonywane, dopóki obiekt nie zostanie wyliczony, wywołując metodę GetEnumerator bezpośrednio lub używając w foreach języku C# lub For Each w Visual Basic.

Pierwszy argument selector reprezentujący element do przetworzenia. Drugi argument selector reprezentujący indeks zerowy tego elementu w sekwencji źródłowej. Może to być przydatne, jeśli elementy są w znanej kolejności i chcesz zrobić coś z elementem w określonym indeksie, na przykład. Może to być również przydatne, jeśli chcesz pobrać indeks jednego lub większej liczby elementów.

Ta metoda projekcji wymaga funkcji transform, selector, aby wygenerować jedną wartość dla każdej wartości w sekwencji źródłowej . source Jeśli selector zwraca wartość, która sama jest kolekcją, do konsumenta należy ręczne przechodzenie podsekwencjonowania. W takiej sytuacji może być lepiej, aby zapytanie zwróciło pojedynczą sekwencję wartości. Aby to osiągnąć, użyj SelectMany metody zamiast Select. Mimo SelectMany że działa podobnie do Select, różni się w tym, że funkcja transform zwraca kolekcję, która jest następnie rozszerzana przed SelectMany zwróceniem.

Dotyczy

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

Projektuje każdy element sekwencji w nowym formularzu.

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ów elementu source.

TResult

Typ wartości zwróconej przez selector.

Parametry

source
IEnumerable<TSource>

Sekwencja wartości do wywołania funkcji transform na.

selector
Func<TSource,TResult>

Funkcja transformacji do zastosowania do każdego elementu.

Zwraca

IEnumerable<TResult>

Element IEnumerable<T> , którego elementy są wynikiem wywołania funkcji transform na każdym elemecie source.

Wyjątki

source lub selector to null.

Przykłady

W poniższym przykładzie kodu pokazano, jak używać Select<TSource,TResult>(IEnumerable<TSource>, Func<TSource,TResult>) metody do tworzenia projektu w sekwencji wartości.

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

Uwagi

Ta metoda jest implementowana za pomocą odroczonego wykonania. Bezpośrednio zwracana wartość jest obiektem, który przechowuje wszystkie informacje wymagane do wykonania akcji. Zapytanie reprezentowane przez tę metodę nie jest wykonywane, dopóki obiekt nie zostanie wyliczony, wywołując metodę GetEnumerator bezpośrednio lub używając w foreach języku C# lub For Each w Visual Basic.

Ta metoda projekcji wymaga funkcji transform, selector, aby wygenerować jedną wartość dla każdej wartości w sekwencji źródłowej . source Jeśli selector zwraca wartość, która sama jest kolekcją, do konsumenta należy ręczne przechodzenie podsekwencjonowania. W takiej sytuacji może być lepiej, aby zapytanie zwróciło pojedynczą sekwencję wartości. Aby to osiągnąć, użyj SelectMany metody zamiast Select. Mimo SelectMany że działa podobnie do Select, różni się w tym, że funkcja transform zwraca kolekcję, która jest następnie rozszerzana przed SelectMany zwróceniem.

W składni wyrażenia zapytania klauzula select (C#) lub Select (Visual Basic) tłumaczy się na wywołanie Select.

Zobacz też

Dotyczy