J'ai deux instances de IEnumerable<T>
(avec le même T
). Je veux une nouvelle instance de IEnumerable<T>
qui est la concaténation des deux.
Existe-t-il une méthode intégrée dans .NET pour faire cela ou dois-je l'écrire moi-même ?
J'ai deux instances de IEnumerable<T>
(avec le même T
). Je veux une nouvelle instance de IEnumerable<T>
qui est la concaténation des deux.
Existe-t-il une méthode intégrée dans .NET pour faire cela ou dois-je l'écrire moi-même ?
Oui, LINQ to Objects supporte cela avec Enumerable.Concat
:
var together = first.Concat(second);
NB : Devrait first
o second
être nulle, vous recevriez un ArgumentNullException
. Pour éviter cela et traiter les nuls comme vous le feriez pour un ensemble vide, utilisez l'opérateur de coalescence des nuls comme suit :
var together = (first ?? Enumerable.Empty<string>()).Concat(second ?? Enumerable.Empty<string>()); //amending `<string>` to the appropriate type
El Concat
retournera un objet qui implémente IEnumerable<T>
en retournant un objet (appelé Cat) dont l'énumérateur tentera d'utiliser les deux éléments énumérables passés (appelés A et B) en séquence. Si les énumérables passés représentent des séquences qui ne changeront pas pendant la durée de vie de Cat, et qui peuvent être lues sans effets secondaires, alors Cat peut être utilisé directement. Sinon, il peut être judicieux d'appeler ToList()
sur Cat
et utiliser le résultat List<T>
(qui représentera un instantané du contenu de A et B).
Certains énumérables prennent un instantané au début de l'énumération, et renverront les données de cet instantané si la collection est modifiée pendant l'énumération. Si B est un tel énumérable, alors toute modification de B survenant avant que Cat n'ait atteint la fin de A apparaîtra dans l'énumération de Cat, mais les modifications survenant après ne le feront pas. Une telle sémantique peut prêter à confusion ; prendre un instantané de Cat peut éviter de tels problèmes.
Vous pouvez utiliser le code ci-dessous pour votre solution:-
public void Linq94()
{
int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 };
int[] numbersB = { 1, 3, 5, 7, 8 };
var allNumbers = numbersA.Concat(numbersB);
Console.WriteLine("All numbers from both arrays:");
foreach (var n in allNumbers)
{
Console.WriteLine(n);
}
}
// The answer that I was looking for when searching
public void Answer()
{
IEnumerable<YourClass> first = this.GetFirstIEnumerableList();
// Assign to empty list so we can use later
IEnumerable<YourClass> second = new List<YourClass>();
if (IwantToUseSecondList)
{
second = this.GetSecondIEnumerableList();
}
IEnumerable<SchemapassgruppData> concatedList = first.Concat(second);
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.