Enumerable.Select 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
将序列中的每个元素投影到新表单。
重载
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
通过合并元素的索引,将序列的每个元素投影到新窗体中。
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>
一个值序列,要对该序列调用转换函数。
返回
一个 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
其方法或通过在 C# For Each
或 foreach
Visual Basic 中使用 来枚举对象之前,不会执行此方法表示的查询。
的第一个 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
将序列中的每个元素投影到新表单。
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<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
其方法或通过在 C# For Each
或 foreach
Visual Basic 中使用 来枚举对象之前,不会执行此方法表示的查询。
此投影方法要求转换函数 selector
为源序列 source
中的每个值生成一个值。 如果 selector
返回的值本身是集合,则由使用者手动遍历子序列。 在这种情况下,查询可能最好返回单个合并的值序列。 若要实现此目的,请使用 SelectMany 方法而不是 Select。 虽然 SelectMany
工作方式与 Select
类似,但它的不同之处在于,转换函数返回一个集合,该集合在返回之前由 SelectMany
扩展。
在查询表达式语法中, select
(C#) 或 Select
(Visual Basic) 子句转换为 的调用 Select。