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 之各個項目叫用轉換函式所產生的結果。

例外狀況

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# 或 foreachFor 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 之各個項目叫用轉換函式所產生的結果。

例外狀況

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# 或 foreachFor Each Visual Basic 中使用 來列舉物件,否則不會執行這個方法所代表的查詢。

此投影方法需要轉換函式 selector ,才能針對來源序列 source 中的每個值產生一個值。 如果 selector 傳回本身為集合的值,則取用者可以手動周遊子序列。 在這種情況下,您的查詢可能會更適合傳回單一聯合的值序列。 若要達成此目的,請使用 SelectMany 方法, Select 而不是 。 雖然 SelectMany 的運作方式 Select 與 類似,但轉換函式會傳回集合,然後在傳回之前先展開 SelectMany 它。

在查詢運算式語法中, select (C#) 或 Select (Visual Basic) 子句會轉譯為 的 Select 調用。

另請參閱

適用於