Enumerable.Select Metod

Definition

Projicerar varje element i en sekvens till ett nytt formulär.

Överlagringar

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

Projicerar varje element i en sekvens i ett nytt formulär genom att införliva elementets index.

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

Projicerar varje element i en sekvens till ett nytt formulär.

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

Projicerar varje element i en sekvens i ett nytt formulär genom att införliva elementets index.

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)

Typparametrar

TSource

Typen av element sourcei .

TResult

Typen av värde som returneras av selector.

Parametrar

source
IEnumerable<TSource>

En sekvens med värden som ska anropa en transformeringsfunktion på.

selector
Func<TSource,Int32,TResult>

En transformeringsfunktion som ska tillämpas på varje källelement. den andra parametern för funktionen representerar indexet för källelementet.

Returer

IEnumerable<TResult>

Ett IEnumerable<T> vars element är resultatet av att anropa transformeringsfunktionen på varje element i source.

Undantag

source eller selector är null.

Exempel

Följande kodexempel visar hur du använder Select<TSource,TResult>(IEnumerable<TSource>, Func<TSource,Int32,TResult>) för att projicera över en sekvens med värden och använda indexet för varje element.

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 }

Kommentarer

Den här metoden implementeras med uppskjuten körning. Det omedelbara returvärdet är ett objekt som lagrar all information som krävs för att utföra åtgärden. Frågan som representeras av den här metoden körs inte förrän objektet räknas upp antingen genom att anropa metoden GetEnumerator direkt eller med hjälp av foreach i C# eller For Each i Visual Basic.

Det första argumentet som selector representerar elementet som ska bearbetas. Det andra argumentet som selector representerar det nollbaserade indexet för det elementet i källsekvensen. Detta kan vara användbart om elementen är i en känd ordning och du till exempel vill göra något med ett element i ett visst index. Det kan också vara användbart om du vill hämta indexet för ett eller flera element.

Den här projektionsmetoden kräver transformeringsfunktionen, selector, för att skapa ett värde för varje värde i källsekvensen, source. Om selector returnerar ett värde som i sig är en samling är det upp till konsumenten att bläddra igenom underfrågorna manuellt. I en sådan situation kan det vara bättre för din fråga att returnera en enda sammansejsad sekvens med värden. För att uppnå detta använder du SelectMany metoden i stället för Select. Även om SelectMany fungerar på liknande sätt Selectskiljer det sig åt eftersom transformeringsfunktionen returnerar en samling som sedan expanderas av SelectMany innan den returneras.

Gäller för

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

Projicerar varje element i en sekvens till ett nytt formulär.

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)

Typparametrar

TSource

Typen av element sourcei .

TResult

Typen av värde som returneras av selector.

Parametrar

source
IEnumerable<TSource>

En sekvens med värden som ska anropa en transformeringsfunktion på.

selector
Func<TSource,TResult>

En transformeringsfunktion som ska tillämpas på varje element.

Returer

IEnumerable<TResult>

Ett IEnumerable<T> vars element är resultatet av att anropa transformeringsfunktionen på varje element i source.

Undantag

source eller selector är null.

Exempel

I följande kodexempel visas hur du projicerar Select<TSource,TResult>(IEnumerable<TSource>, Func<TSource,TResult>) över en sekvens med värden.

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

Kommentarer

Den här metoden implementeras med uppskjuten körning. Det omedelbara returvärdet är ett objekt som lagrar all information som krävs för att utföra åtgärden. Frågan som representeras av den här metoden körs inte förrän objektet räknas upp antingen genom att anropa metoden GetEnumerator direkt eller med hjälp av foreach i C# eller For Each i Visual Basic.

Den här projektionsmetoden kräver transformeringsfunktionen, selector, för att skapa ett värde för varje värde i källsekvensen, source. Om selector returnerar ett värde som i sig är en samling är det upp till konsumenten att bläddra igenom underfrågorna manuellt. I en sådan situation kan det vara bättre för din fråga att returnera en enda sammansejsad sekvens med värden. För att uppnå detta använder du SelectMany metoden i stället för Select. Även om SelectMany fungerar på liknande sätt Selectskiljer det sig åt eftersom transformeringsfunktionen returnerar en samling som sedan expanderas av SelectMany innan den returneras.

I frågeuttryckssyntax översätts en select (C#) eller Select-sats (Visual Basic) till ett anrop av Select.

Se även

Gäller för