Enumerable.Select Metodo

Definizione

Proietta ogni elemento di una sequenza in un nuovo form.

Overload

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

Proietta ogni elemento di una sequenza in un nuovo form.

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

Proietta ogni elemento di una sequenza in un nuovo modulo incorporando l'indice dell'elemento.

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

Proietta ogni elemento di una sequenza in un nuovo form.

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)

Parametri di tipo

TSource

Tipo degli elementi di source.

TResult

Tipo del valore restituito dall'oggetto selector.

Parametri

source
IEnumerable<TSource>

Sequenza di valori su cui richiamare una funzione di trasformazione.

selector
Func<TSource,TResult>

Funzione di trasformazione da applicare a ogni elemento.

Restituisce

IEnumerable<TResult>

Oggetto IEnumerable<T> i cui elementi sono il risultato ottenuto richiamando una funzione di trasformazione su ogni elemento di source.

Eccezioni

source o selector è null.

Esempio

Nell'esempio di codice seguente viene illustrato come usare Select<TSource,TResult>(IEnumerable<TSource>, Func<TSource,TResult>) per proiettare su una sequenza di valori.

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

Commenti

Questo metodo viene implementato usando l'esecuzione posticipata. Il valore restituito immediato è un oggetto che archivia tutte le informazioni necessarie per eseguire l'azione. La query rappresentata da questo metodo non viene eseguita finché l'oggetto non viene enumerato chiamando direttamente il relativo GetEnumerator metodo o usando foreach in Visual C# o For Each in Visual Basic.

Questo metodo di proiezione richiede la funzione di trasformazione, selector, per produrre un valore per ogni valore nella sequenza di origine, source. Se selector restituisce un valore che è stesso una raccolta, spetta al consumer attraversare manualmente le sottosequenze. In una situazione di questo tipo, potrebbe essere preferibile che la query restituisca una singola sequenza di valori coalesced. A tale scopo, usare il SelectMany metodo anziché Select. Anche se SelectMany funziona in modo analogo a Select, è diverso dal fatto che la funzione di trasformazione restituisce una raccolta che viene quindi espansa da SelectMany prima che venga restituita.

Nella sintassi delle espressioni di query una select clausola (Visual C#) o Select (Visual Basic) viene convertita in una chiamata di Select.

Vedi anche

Si applica a

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

Proietta ogni elemento di una sequenza in un nuovo modulo incorporando l'indice dell'elemento.

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)

Parametri di tipo

TSource

Tipo degli elementi di source.

TResult

Tipo del valore restituito dall'oggetto selector.

Parametri

source
IEnumerable<TSource>

Sequenza di valori su cui richiamare una funzione di trasformazione.

selector
Func<TSource,Int32,TResult>

Funzione di trasformazione da applicare a ogni elemento di origine; il secondo parametro della funzione rappresenta l'indice dell'elemento di origine.

Restituisce

IEnumerable<TResult>

Oggetto IEnumerable<T> i cui elementi sono il risultato ottenuto richiamando una funzione di trasformazione su ogni elemento di source.

Eccezioni

source o selector è null.

Esempio

Nell'esempio di codice seguente viene illustrato come usare Select<TSource,TResult>(IEnumerable<TSource>, Func<TSource,Int32,TResult>) per proiettare su una sequenza di valori e usare l'indice di ogni elemento.

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 }

Commenti

Questo metodo viene implementato usando l'esecuzione posticipata. Il valore restituito immediato è un oggetto che archivia tutte le informazioni necessarie per eseguire l'azione. La query rappresentata da questo metodo non viene eseguita finché l'oggetto non viene enumerato chiamando direttamente il relativo GetEnumerator metodo o usando foreach in Visual C# o For Each in Visual Basic.

Primo argomento da selector rappresentare l'elemento da elaborare. Secondo argomento da selector rappresentare l'indice in base zero di tale elemento nella sequenza di origine. Ciò può essere utile se gli elementi sono in un ordine noto e si vuole eseguire un'operazione con un elemento in corrispondenza di un indice specifico, ad esempio. Può essere utile anche se si desidera recuperare l'indice di uno o più elementi.

Questo metodo di proiezione richiede la funzione di trasformazione, selector, per produrre un valore per ogni valore nella sequenza di origine, source. Se selector restituisce un valore che è stesso una raccolta, spetta al consumer attraversare manualmente le sottosequenze. In una situazione di questo tipo, potrebbe essere preferibile che la query restituisca una singola sequenza di valori coalesced. A tale scopo, usare il SelectMany metodo anziché Select. Anche se SelectMany funziona in modo analogo a Select, è diverso dal fatto che la funzione di trasformazione restituisce una raccolta che viene quindi espansa da SelectMany prima che venga restituita.

Si applica a