如何使用单个表达式定义编写此代码,但在 C# 中保留整个函数的表达式主体定义
本文关键字:表达式 定义 保留 函数 主体 单个 何使用 代码 但在 | 更新日期: 2023-09-27 18:26:16
void Foo(int a, int b)
=> Bar(a + 1, b + 1)
这可以这样写,以对Inc进行单一定义
void Foo(int a, int b)
{
Func<int, int> Inc = (x) => x + 1;
Bar(Inc(a), Inc(b));
}
我正在寻找优雅的方式来保持 Foo 的表达身体定义,但只有一个 lambda 来定义 Inc 表达式。如果我将 Inc 作为单独的函数很容易,但我有兴趣将其保留为 lambda。
这将起作用,但缺点是必须为每个数量的参数编写它,但由于 Func<> 以类似的方式定义,它并没有那么糟糕。
public static class FunctionalExtensions
{
public static Action<A, A> ArgumentTransform<A>(this Func<A, A> argConverter, Action<A, A> action)
=> (x, y) => action(argConverter(x), argConverter(y));
public static Func<A, A, R> ArgumentTransform<A, R>(this Func<A, A> argConverter, Func<A, A, R> function)
=> (x, y) => function(argConverter(x), argConverter(y));
}
它可以像这样使用:
void Foo(int a, int b) => new Func<int, int>((x) => x + 1).ArgumentTransform(Bar)(a, b);