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# 或 foreach
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<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# 或 foreach
For Each
Visual Basic 中使用 來列舉物件,否則不會執行這個方法所代表的查詢。
此投影方法需要轉換函式 selector
,才能針對來源序列 source
中的每個值產生一個值。 如果 selector
傳回本身為集合的值,則取用者可以手動周遊子序列。 在這種情況下,您的查詢可能會更適合傳回單一聯合的值序列。 若要達成此目的,請使用 SelectMany 方法, Select 而不是 。 雖然 SelectMany
的運作方式 Select
與 類似,但轉換函式會傳回集合,然後在傳回之前先展開 SelectMany
它。
在查詢運算式語法中, select
(C#) 或 Select
(Visual Basic) 子句會轉譯為 的 Select 調用。
另請參閱
適用於
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應