Enumerable.Concat<TSource> Metoda

Definicja

Łączy dwie sekwencje.

C#
public static System.Collections.Generic.IEnumerable<TSource> Concat<TSource> (this System.Collections.Generic.IEnumerable<TSource> first, System.Collections.Generic.IEnumerable<TSource> second);

Parametry typu

TSource

Typ elementów sekwencji wejściowych.

Parametry

first
IEnumerable<TSource>

Pierwsza sekwencja do połączenia.

second
IEnumerable<TSource>

Sekwencja, która ma być połączona z pierwszą sekwencją.

Zwraca

IEnumerable<TSource>

Element IEnumerable<T> zawierający łączone elementy dwóch sekwencji wejściowych.

Wyjątki

first lub second ma wartość null.

Przykłady

W poniższym przykładzie kodu pokazano, jak używać Concat<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) metody łączenia dwóch sekwencji.

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

Alternatywnym sposobem łączenia dwóch sekwencji jest utworzenie kolekcji, na przykład tablicy, sekwencji, a następnie zastosowanie SelectMany metody, przekazując ją do funkcji selektora tożsamości. W poniższym przykładzie pokazano użycie metody SelectMany.

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

Uwagi

Ta metoda jest implementowana za pomocą odroczonego wykonania. Bezpośrednio zwracana wartość jest obiektem, który przechowuje wszystkie informacje wymagane do wykonania akcji. Zapytanie reprezentowane przez tę metodę nie jest wykonywane, dopóki obiekt nie zostanie wyliczone przez wywołanie metody GetEnumerator bezpośrednio lub przy użyciu foreach języka C# lub For Each w Visual Basic.

Metoda Concat<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) różni się od Union metody, ponieważ Concat<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) metoda zwraca wszystkie oryginalne elementy w sekwencjach wejściowych. Metoda Union zwraca tylko unikatowe elementy.

Dotyczy

Produkt Wersje
.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