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>)
- 來源:
- 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>
要對於叫用轉換函式的值序列。
傳回
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# 或 Visual Basic 中使用 foreach
來列舉對象,否則 For Each
不會執行這個方法所表示的查詢。
表示要處理之專案的第一個自變數 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<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# 或 Visual Basic 中使用 foreach
來列舉對象,否則 For Each
不會執行這個方法所表示的查詢。
此投影方法需要轉換函式 , selector
才能為來源序列 source
中的每個值產生一個值。 如果傳 selector
回本身為集合的值,則由取用者手動周遊子序列。 在這種情況下,您的查詢可能會傳回單一聯合值序列。 若要達成此目的,請使用 SelectMany 方法,而不是 Select。 雖然 SelectMany
的運作方式 Select
與 類似,但轉換函式會傳回一個集合,然後在傳回之前加以展開 SelectMany
。
在查詢表達式語法中, select
(C#) 或 Select
(Visual Basic) 子句會轉譯為 的 Select調用。