124 votes

Une façon élégante de combiner plusieurs collections d'éléments ?

Supposons que je dispose d'un nombre arbitraire de collections, chacune contenant des objets du même type (par exemple, List<int> foo y List<int> bar ). Si ces collections étaient elles-mêmes dans une collection (par exemple, de type List<List<int>> Je pourrais utiliser SelectMany pour les réunir en une seule collection.

Cependant, si ces collections ne sont pas déjà dans la même collection, j'ai l'impression que je devrais écrire une méthode comme celle-ci :

public static IEnumerable<T> Combine<T>(params ICollection<T>[] toCombine)
{
   return toCombine.SelectMany(x => x);
}

Que j'appellerais alors ainsi :

var combined = Combine(foo, bar);

Existe-t-il un moyen propre et élégant de combiner (un nombre quelconque de) collections sans avoir à écrire une méthode utilitaire telle que Combine ci-dessus ? Cela semble suffisamment simple pour qu'il y ait un moyen de le faire dans LINQ, mais ce n'est peut-être pas le cas.

1voto

Dave Swersky Points 25958

Étant donné que vous partez d'un ensemble de collections distinctes, je pense que votre solution est plutôt élégante. Vous allez devoir faire quelque chose pour les assembler.

D'un point de vue syntaxique, il serait plus pratique de créer une méthode d'extension à partir de votre méthode Combine, ce qui la rendrait disponible partout.

Prograide.com

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.

Powered by:

X