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

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

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

另請參閱

適用於