Мне нужно передать результаты функции-источника (которая возвращает IEnumerable
) через список других функций обработки (которые каждая принимает и возвращает IEnumerable
).
До этого момента все было в порядке, но мне также нужно разрешить функциям обработки выполнять несколько циклов над их входными перечислимыми.
Поэтому вместо того, чтобы передавать IEnumerable<T>
, я решил изменить входной параметр на Func<IEnumerable<T>>
и разрешить каждой функции перезапускать перечисляемое при необходимости.
К сожалению, теперь я получаю переполнение стека, когда конечная функция обработки вызывает себя, а не передает запрос обратно по цепочке.
Пример кода немного надуман, но, надеюсь, даст вам представление о том, чего я пытаюсь достичь.
class Program
{
public static void Main(string[] args)
{
Func<IEnumerable<String>> getResults = () => GetInputValues("A", 5);
List<String> valuesToAppend = new List<String>();
valuesToAppend.Add("B");
valuesToAppend.Add("C");
foreach (var item in valuesToAppend)
{
getResults = () => ProcessValues(() => getResults(),item);
}
foreach (var item in getResults())
{
Console.WriteLine(item);
}
}
public static IEnumerable<String> GetInputValues(String value, Int32 numValues)
{
for (int i = 0; i < numValues; i++)
{
yield return value;
}
}
public static IEnumerable<String> ProcessValues(Func<IEnumerable<String>> getInputValues, String appendValue)
{
foreach (var item in getInputValues())
{
yield return item + " " + appendValue;
}
}
}