// this is wrong
public IEnumerable<T> MyFunction(Func<T, T> function, int iteration)
{
yield return Enumerable.Repeat<T>(function.Invoke(), iteration);
}
вы возвращаете всю коллекцию IEnumerable, возвращаемую Repeat (...) за один выход (бессмысленно).
Другая проблема вашего метода - тип возвращаемого значения. Если вы хотите вернуть ваши объекты Func, вы должны заменить тип возврата вашего метода с IEnumerable<T>
на Func<T,T>
.
Цель метода Enumerable.Repeat<T>(...)
- создать коллекцию с N экземплярами данного объекта и вернуть всю коллекцию .
Если вы хотите вернуть объекты в выходах, вы должны возвращать эти объекты один за другим.
Я думаю, вам нужно что-то вроде этого:
(для лучшего понимания я не использую LINQ и лямбда-выражения)
public Func<T,T> MyFunction(Func<T, T> function, int iteration)
{
// create a collection with `N = interation` items
IEnumerable<Func<T,T>> items = Enumerable.Repeat<T>(function.Invoke(), iteration);
// return items
foreach(Func<T,T> item in items)
{
yield return item;
}
}