Enumerable.Concat<TSource> Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Łączy dwie sekwencje.
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)
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
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.
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
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.
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
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.