Enumerable.Concat<TSource> Methode

Definitie

Voegt twee reeksen samen.

public:
generic <typename TSource>
[System::Runtime::CompilerServices::Extension]
 static System::Collections::Generic::IEnumerable<TSource> ^ Concat(System::Collections::Generic::IEnumerable<TSource> ^ first, System::Collections::Generic::IEnumerable<TSource> ^ second);
public static System.Collections.Generic.IEnumerable<TSource> Concat<TSource>(this System.Collections.Generic.IEnumerable<TSource> first, System.Collections.Generic.IEnumerable<TSource> second);
static member Concat : seq<'Source> * seq<'Source> -> seq<'Source>
<Extension()>
Public Function Concat(Of TSource) (first As IEnumerable(Of TSource), second As IEnumerable(Of TSource)) As IEnumerable(Of TSource)

Type parameters

TSource

Het type van de elementen van de invoerreeksen.

Parameters

first
IEnumerable<TSource>

De eerste reeks die moet worden samengevoegd.

second
IEnumerable<TSource>

De volgorde die moet worden samengevoegd met de eerste reeks.

Retouren

IEnumerable<TSource>

Een IEnumerable<T> die de samengevoegde elementen van de twee invoerreeksen bevat.

Uitzonderingen

first of second is null.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe Concat<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) u twee reeksen kunt samenvoegen.

class Pet
{
    public string Name { get; set; }
    public int Age { get; set; }
}

static Pet[] GetCats()
{
    Pet[] cats = { new Pet { Name="Barley", Age=8 },
                   new Pet { Name="Boots", Age=4 },
                   new Pet { Name="Whiskers", Age=1 } };
    return cats;
}

static Pet[] GetDogs()
{
    Pet[] dogs = { new Pet { Name="Bounder", Age=3 },
                   new Pet { Name="Snoopy", Age=14 },
                   new Pet { Name="Fido", Age=9 } };
    return dogs;
}

public static void ConcatEx1()
{
    Pet[] cats = GetCats();
    Pet[] dogs = GetDogs();

    IEnumerable<string> query =
        cats.Select(cat => cat.Name).Concat(dogs.Select(dog => dog.Name));

    foreach (string name in query)
    {
        Console.WriteLine(name);
    }
}

// This code produces the following output:
//
// Barley
// Boots
// Whiskers
// Bounder
// Snoopy
// Fido
Structure Pet
    Public Name As String
    Public Age As Integer
End Structure

' Returns an array of Pet objects.
Function GetCats() As Pet()
    Dim cats() As Pet = {New Pet With {.Name = "Barley", .Age = 8},
                 New Pet With {.Name = "Boots", .Age = 4},
                 New Pet With {.Name = "Whiskers", .Age = 1}}

    Return cats
End Function

' Returns an array of Pet objects.
Function GetDogs() As Pet()
    Dim dogs() As Pet = {New Pet With {.Name = "Bounder", .Age = 3},
                 New Pet With {.Name = "Snoopy", .Age = 14},
                 New Pet With {.Name = "Fido", .Age = 9}}
    Return dogs
End Function

Sub ConcatEx1()
    ' Create two arrays of Pet objects.
    Dim cats() As Pet = GetCats()
    Dim dogs() As Pet = GetDogs()

    ' Project the Name of each cat and concatenate
    ' the collection of cat name strings with a collection
    ' of dog name strings.
    Dim query As IEnumerable(Of String) =
cats _
.Select(Function(cat) cat.Name) _
.Concat(dogs.Select(Function(dog) dog.Name))

    Dim output As New System.Text.StringBuilder
    For Each name As String In query
        output.AppendLine(name)
    Next

    ' Display the output.
    Console.WriteLine(output.ToString())
End Sub

' This code produces the following output:
'
' Barley
' Boots
' Whiskers
' Bounder
' Snoopy
' Fido

Een alternatieve manier om twee reeksen samen te stellen, is door een verzameling, bijvoorbeeld een matrix, van reeksen te maken en vervolgens de SelectMany methode toe te passen, waarbij deze de identiteitskiezerfunctie doorgeeft. In het volgende voorbeeld ziet u dit gebruik van SelectMany.

Pet[] cats = GetCats();
Pet[] dogs = GetDogs();

IEnumerable<string> query =
    new[] { cats.Select(cat => cat.Name), dogs.Select(dog => dog.Name) }
    .SelectMany(name => name);

foreach (string name in query)
{
    Console.WriteLine(name);
}

// This code produces the following output:
//
// Barley
// Boots
// Whiskers
// Bounder
// Snoopy
// Fido
    ' Create two arrays of Pet objects.
    Dim cats() As Pet = GetCats()
    Dim dogs() As Pet = GetDogs()

    ' Create an IEnumerable collection that contains two elements.
    ' Each element is an array of Pet objects.
    Dim animals() As IEnumerable(Of Pet) = {cats, dogs}

    Dim query As IEnumerable(Of String) =
(animals.SelectMany(Function(pets) _
                        pets.Select(Function(pet) pet.Name)))

    Dim output As New System.Text.StringBuilder
    For Each name As String In query
        output.AppendLine(name)
    Next

    ' Display the output.
    Console.WriteLine(output.ToString())

    ' This code produces the following output:
    '
    ' Barley
    ' Boots
    ' Whiskers
    ' Bounder
    ' Snoopy
    ' Fido

Opmerkingen

Deze methode wordt geïmplementeerd met behulp van de uitgestelde uitvoering. De onmiddellijke retourwaarde is een object waarin alle informatie wordt opgeslagen die nodig is om de actie uit te voeren. De query die door deze methode wordt vertegenwoordigd, wordt pas uitgevoerd nadat het object is geïnventariseerd door de methode GetEnumerator rechtstreeks aan te roepen of door foreach te gebruiken in C# of For Each in Visual Basic.

De Concat<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) methode verschilt van de Union methode omdat de Concat<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) methode alle oorspronkelijke elementen in de invoerreeksen retourneert. De Union methode retourneert alleen unieke elementen.

Van toepassing op