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

透過加入項目的索引,將序列的每個項目投影成新的表單。

C#
public static System.Collections.Generic.IEnumerable<TResult> Select<TSource,TResult> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,int,TResult> selector);

類型參數

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>) 來投影值序列,並使用每個元素的索引。

C#
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 }
*/

備註

此方法是使用延後執行來實作。 立即傳回值是物件,可儲存執行動作所需的所有資訊。 除非直接在 GetEnumerator C# 或 Visual Basic 中使用 foreach 來列舉對象,否則 For Each 不會執行這個方法所表示的查詢。

表示要處理之專案的第一個自變數 selector 。 第二個自變數, selector 表示來源序列中該元素之以零起始的索引。 例如,如果元素處於已知順序,而且您想要在特定索引處使用元素執行某些動作,這非常有用。 如果您想要擷取一或多個元素的索引,它也很有用。

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

適用於

.NET 9 和其他版本
產品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

Select<TSource,TResult>(IEnumerable<TSource>, Func<TSource,TResult>)

來源:
Select.cs
來源:
Select.cs
來源:
Select.cs

將序列的每個元素規劃成一個新的表單。

C#
public static System.Collections.Generic.IEnumerable<TResult> Select<TSource,TResult> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,TResult> selector);

類型參數

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>) 來投影值序列。

C#
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
*/

備註

此方法是使用延後執行來實作。 立即傳回值是物件,可儲存執行動作所需的所有資訊。 除非直接在 GetEnumerator C# 或 Visual Basic 中使用 foreach 來列舉對象,否則 For Each 不會執行這個方法所表示的查詢。

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

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

另請參閱

適用於

.NET 9 和其他版本
產品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0