recorrer que getenumerator create c# iterator ienumerable

que - Encadenando IEnumerables en C#?



list ienumerable c# (3)

¿Existe una forma simple incorporada de tomar una lista ordenada de IEnumerable y devolver un único IEnumerable que IEnumerable , en orden, todos los elementos en el primero, luego el segundo, y así sucesivamente.

Ciertamente podría escribir el mío, pero quería saber si ya existía una forma de lograr esta tarea aparentemente útil antes de hacerlo.


Además de la respuesta (correcta) de JaredPar, también consulta la sintaxis:

var all = from inner in outer from item in inner select item;


Además de las respuestas (correctas) basadas en LINQ ...

Si no quiere usar LINQ, puede inventar una clase ChainedEnumerable, usando yield:

public class ChainedEnumerable<T> : IEnumerable<T> { private readonly IEnumerable<T>[] _inners; public ChainedEnumerable(params IEnumerable<T>[] inners) { _inners = inners; } public IEnumerator<T> GetEnumerator() { foreach (IEnumerable<T> inner in _inners) { foreach (T t in inner) { yield return t; } } } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } }

Úselo así:

List<string> a = new List<string> { "A1", "A2", "A3" }; List<string> b = new List<string> { "B1", "B2", "B3" }; ChainedEnumerable<string> chainedEnumerable = new ChainedEnumerable<string>(a, b); foreach (string s in chainedEnumerable) Console.WriteLine(s);


Pruebe SelectMany.

IEnumerable<int> Collapse(IEnumerable<IEnumerable<int>> e){ return e.SelectMany(x => x ); }

El propósito de esta función es aplanar un grupo de IEnumerable <IEnumerable <T >> en un IEnumerable <T>. Los datos devueltos conservarán el orden original.