Enumerable.Concat<TSource> Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Concatène deux séquences.
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)
Paramètres de type
- TSource
Type des éléments des séquences d'entrée.
Paramètres
- first
- IEnumerable<TSource>
Première séquence à concaténer.
- second
- IEnumerable<TSource>
Séquence à concaténer à la première séquence.
Retours
IEnumerable<T> qui contient les éléments concaténés des deux séquences d'entrée.
Exceptions
first
ou second
est null
.
Exemples
L’exemple de code suivant montre comment utiliser Concat<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) pour concaténer deux séquences.
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
Une autre façon de concaténer deux séquences consiste à construire une collection, par exemple un tableau, de séquences, puis à appliquer la SelectMany méthode, en lui transmettant la fonction de sélecteur d’identité. L’exemple suivant illustre cette utilisation de 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
Remarques
Cette méthode est implémentée à l’aide d’une exécution différée. La valeur de retour immédiat est un objet qui stocke toutes les informations nécessaires à l’exécution de l’action. La requête représentée par cette méthode n’est pas exécutée tant que l’objet n’est pas énuméré soit en appelant directement sa GetEnumerator
méthode, soit en utilisant foreach
en C# ou For Each
en Visual Basic.
La Concat<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) méthode diffère de la Union méthode, car la Concat<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) méthode retourne tous les éléments d’origine dans les séquences d’entrée. La Union méthode retourne uniquement des éléments uniques.