Поделиться через


Enumerable.Select Метод

Определение

Проецирует каждый элемент последовательности в новую форму.

Перегрузки

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

Проецирует каждый элемент последовательности в новую форму, добавляя индекс элемента.

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

Проецирует каждый элемент последовательности в новую форму.

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

Исходный код:
Select.cs
Исходный код:
Select.cs
Исходный код:
Select.cs

Проецирует каждый элемент последовательности в новую форму, добавляя индекс элемента.

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)

Параметры типа

TSource

Тип элементов source.

TResult

Тип значения, возвращаемого функцией selector.

Параметры

source
IEnumerable<TSource>

Последовательность значений, для которых вызывается функция преобразования.

selector
Func<TSource,Int32,TResult>

Функция преобразования, применяемая к каждому исходному элементу; второй параметр функции представляет индекс исходного элемента.

Возвращаемое значение

IEnumerable<TResult>

Объект IEnumerable<T>, элементы которого получены в результате вызова функции преобразования для каждого элемента последовательности source.

Исключения

Параметр source или selector имеет значение null.

Примеры

В следующем примере кода показано, как использовать Select<TSource,TResult>(IEnumerable<TSource>, Func<TSource,Int32,TResult>) для проецирования последовательность значений и использовать индекс каждого элемента.

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 }

Комментарии

Этот метод реализуется с помощью отложенного выполнения. Немедленно возвращаемое значение — это объект, в котором хранятся все сведения, необходимые для выполнения действия. Запрос, представленный этим методом, не выполняется до тех пор, пока объект не будет перечислен либо путем вызова его GetEnumerator метода напрямую, либо с помощью foreach в C# или For Each в Visual Basic.

Первый аргумент представляет selector обрабатываемый элемент. Второй аргумент для selector представляет отсчитываемый от нуля индекс этого элемента в исходной последовательности. Это может быть полезно, если элементы находятся в известном порядке и вы хотите сделать что-то с элементом по определенному индексу, например. Это также может быть полезно, если требуется получить индекс одного или нескольких элементов.

Для этого метода проекции требуется функция преобразования , selectorчтобы создать по одному значению для каждого значения в исходной последовательности source. Если selector возвращает значение, которое само по себе является коллекцией, потребитель может вручную пройти по вложенным значениям. В такой ситуации может быть лучше, чтобы запрос возвращал одну объединенную последовательность значений. Для этого используйте SelectMany метод вместо Select. Хотя SelectMany работает аналогично Select, она отличается тем, что функция преобразования возвращает коллекцию, которая затем расширяется SelectMany до того, как она возвращается.

Применяется к

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

Исходный код:
Select.cs
Исходный код:
Select.cs
Исходный код:
Select.cs

Проецирует каждый элемент последовательности в новую форму.

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)

Параметры типа

TSource

Тип элементов source.

TResult

Тип значения, возвращаемого функцией selector.

Параметры

source
IEnumerable<TSource>

Последовательность значений, для которых вызывается функция преобразования.

selector
Func<TSource,TResult>

Функция преобразования, применяемая к каждому элементу.

Возвращаемое значение

IEnumerable<TResult>

Объект IEnumerable<T>, элементы которого получены в результате вызова функции преобразования для каждого элемента последовательности source.

Исключения

Параметр source или selector имеет значение null.

Примеры

В следующем примере кода показано, как использовать Select<TSource,TResult>(IEnumerable<TSource>, Func<TSource,TResult>) для проецировать последовательность значений.

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

Комментарии

Этот метод реализуется с помощью отложенного выполнения. Немедленно возвращаемое значение — это объект, в котором хранятся все сведения, необходимые для выполнения действия. Запрос, представленный этим методом, не выполняется до тех пор, пока объект не будет перечислен либо путем вызова его GetEnumerator метода напрямую, либо с помощью foreach в C# или For Each в Visual Basic.

Для этого метода проекции требуется функция преобразования , selectorчтобы создать по одному значению для каждого значения в исходной последовательности source. Если selector возвращает значение, которое само по себе является коллекцией, потребитель может вручную пройти по вложенным значениям. В такой ситуации может быть лучше, чтобы запрос возвращал одну объединенную последовательность значений. Для этого используйте SelectMany метод вместо Select. Хотя SelectMany работает аналогично Select, она отличается тем, что функция преобразования возвращает коллекцию, которая затем расширяется SelectMany до того, как она возвращается.

В синтаксисе выражений selectSelectзапроса предложение (C#) или Select (Visual Basic) преобразуется в вызов .

См. также раздел

Применяется к