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

Source:
Select.cs
Source:
Select.cs
Source:
Select.cs
Source:
Select.cs
Source:
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调用转换函数的结果。

例外

sourceselectornull.

示例

下面的代码示例演示如何用于 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 方法或在 C# 中使用 foreach 或在 Visual Basic 中使用 For Each 来枚举对象,否则不会执行此方法表示的查询。

表示 selector 要处理的元素的第一个参数。 第二个参数,表示 selector 源序列中该元素的从零开始的索引。 例如,如果元素按已知顺序运行,并且想要使用特定索引处的元素执行某些操作,这非常有用。 如果要检索一个或多个元素的索引,它也很有用。

此投影方法需要转换函数, selector才能为源序列 source中的每个值生成一个值。 如果 selector 返回的是集合本身的值,则由使用者手动遍历子序列。 在这种情况下,查询可能最好返回单个合并的值序列。 若要实现此目的,请使用 SelectMany 方法而不是 Select。 虽然 SelectMany 工作原理 Select类似,但转换函数返回一个集合,然后在返回集合之前对其进行扩展 SelectMany

适用于

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

Source:
Select.cs
Source:
Select.cs
Source:
Select.cs
Source:
Select.cs
Source:
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调用转换函数的结果。

例外

sourceselectornull.

示例

下面的代码示例演示如何用于 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 方法或在 C# 中使用 foreach 或在 Visual Basic 中使用 For Each 来枚举对象,否则不会执行此方法表示的查询。

此投影方法需要转换函数, selector才能为源序列 source中的每个值生成一个值。 如果 selector 返回的是集合本身的值,则由使用者手动遍历子序列。 在这种情况下,查询可能最好返回单个合并的值序列。 若要实现此目的,请使用 SelectMany 方法而不是 Select。 虽然 SelectMany 工作原理 Select类似,但转换函数返回一个集合,然后在返回集合之前对其进行扩展 SelectMany

在查询表达式语法中,select (C#) 或 Select (Visual Basic) 子句转换为调用 Select

另请参阅

适用于