Имеет ли система типов c # возможность указать функцию, которая принимает перечисляемое число функций, которые коммутируют для формирования конвейера?
Эффект будет аналогичен цепочке, но вместо
var pipeline = a.Chain(b).Chain(c)
можно написать
var pipeline = CreatePipeline(a,b,c)
где a, b и c - функции?Я включил небольшой пример кода для иллюстрации, спасибо.
void Main()
{
Func<int, string> a = i => i.ToString();
Func<string, DateTime> b = s => new DateTime(2000,1,1).AddDays(s.Length);
Func<DateTime, bool> c = d => d.DayOfWeek == DayOfWeek.Wednesday;
//var myPipeline = CreatePipeline(a, b, c);
Func<int, bool> similarTo = i => c(b(a(i))) ;
Func<int, bool> isThisTheBestWeCanDo = a.Chain(b).Chain(c);
}
public static class Ext{
//public static Func<X, Z> CreatePipeline<X,Z>(params MagicFunc<X..Y>[] fns) {
// return
//}
public static Func<X, Z> Chain<X,Y,Z>(this Func<X,Y> a, Func<Y,Z> b)
{
return x => b(a(x));
}
}