我想知道如何使用 lambda 表达式进行函数组合。我的意思是,我有 2 个函数 f(x) 和 g(x)。如何使用 lambda 表达式制作它们的组合 f(g(x))?谢谢
问问题
683 次
3 回答
2
通用版本:
static Func<T, T> Compose<T>(params Func<T, T>[] ff)
{
Func<T, T> id = x => x;
foreach (var f in ff)
{
var i = f;
var idd = id;
id = x => i(idd(x));
}
return id;
}
由于 C# 缺乏适当的词法作用域,我们需要一大堆不同名称的临时变量。
于 2012-01-20T06:09:39.670 回答
2
Func<int, int> f = x => x + 1;
Func<int, int> g = x => x * 2;
Func<int, int> fg = x => f(g(x));
Console.WriteLine(fg(5));
于 2012-01-20T06:00:29.670 回答
2
您的问题非常简短,我不确定我是否能很好地解决问题,但是我认为这就是您所需要的:
Func<int,int> compose(Func<int,int> f, Func<int,int> g)
{
return x=>f(g(x));
}
var fg = compose(f,g);
Func<int,int> f = ....
Func<int,int> g = ....
Func<int,int> fg = compose(f,g);
C# 的问题是您需要为每个不同的方法签名编写此类组合函数,因此您无法使用通用方法组合函数。
于 2012-01-20T06:07:57.380 回答