Попробуйте метод расширения SelectMany, добавленный в 3.5.
IEnumerable<IEnumerable<int>> e = ...;
foreach ( int cur in e.SelectMany(x => x)) {
Console.WriteLine(cur);
}
Код SelectMany(x => x)
позволяет свести коллекцию коллекций в одну коллекцию. Это выполняется ленивым образом и позволяет выполнять прямую обработку, как показано выше.
Если у вас есть только C # 2.0, вы можете использовать итератор для достижения тех же результатов.
public static IEnumerable<T> Flatten<T>(IEnumerable<IEnumerable<T>> enumerable) {
foreach ( var inner in enumerable ) {
foreach ( var value in inner ) {
yield return value;
}
}
}