lambda 表达式 C#

发布于 2024-12-28 00:35:15 字数 95 浏览 1 评论 0原文

我想知道如何使用 lambda 表达式进行函数组合。 我的意思是,我有 2 个函数 f(x) 和 g(x)。如何使用 lambda 表达式制作它们的组合 f(g(x))? 谢谢

I would like to know how to make function composition using lambda expression.
I mean, I have 2 function f(x) and g(x). How to make their composition f(g(x)) using lambda expressions?
Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

奈何桥上唱咆哮 2025-01-04 00:35:15

通用版本:

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# 缺乏适当的词法作用域,我们需要一大堆具有不同名称的临时变量。

Generic version:

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;
}

Due to C#'s lack of proper lexical scoping, we need a whole bunch of temporary variables with different names.

倦话 2025-01-04 00:35:15
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));
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));
爱,才寂寞 2025-01-04 00:35:15

你的问题很简短,我不确定我是否理解得很好,但我认为这就是你所需要的:

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# 的问题是你需要为每个不同的方法签名编写这样的组合函数,因此你无法组合函数使用通用方法。

Your question is very brief, I am not sure if I get it well, however I think this is what you need:

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);

The problem with C# is that you need to write such compose functions for each different method signatures and therefore you could not compose functions using a generic method.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文