Предположим, у меня есть два (или более) IEnumerable<T>
со многими элементами. Каждый IEnumerable
имеет другой тип T
. Списки могут быть очень длинными и не должны полностью загружаться в память.
IEnumerable<int> ints = getManyInts();
IEnumerable<string> strings = getSomeStrings();
IEnumerable<DateTime> dates = getSomeDates();
Что я хочу сделать, так это перебирать эти списки и получать элемент, содержащий один int, одну строку и один DateTime для каждого шага, пока не будет достигнут конец самого длинного или самого короткого списка. Оба случая должны быть поддержаны (параметр bool самый длинный или самый короткий или около того). Для каждого элемента, недоступного в более коротких списках (потому что конец уже достигнут), я ожидаю значения по умолчанию.
for(Tuple<int,string,DateTime> item in
Foo.Combine<int,string,DateTime>(ints, strings, dates))
{
int i=item.Item1;
string s=item.Item2;
DateTime d=item.Item3;
}
Можно ли сделать это с помощью linq, используя отложенное выполнение?
Я знаю решение, использующее IEnumerators, непосредственно объединенное с доходностью.
См. Как я могу перебрать два IEnumerables одновременно в .NET 2