You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#高阶函数SwapArgs中为何两次使用=>?请技术解析

为什么SwapArgs方法里用了两次=>?

我们把代码拆成两部分分析,就能明白两个=>的不同作用:

第一个=>:表达式体方法语法

C# 6及以后支持表达式体方法,当方法逻辑只有一行返回语句时,可以用=>替代传统的{ return ...; }写法。比如SwapArgs的完整写法是:

static Func<T2, T1, R> SwapArgs<T1, T2, R>(this Func<T1, T2, R> f)
{
    return (t2, t1) => f(t1, t2);
}

用表达式体简化后,就变成了你看到的:

static Func<T2, T1, R> SwapArgs<T1, T2, R>(this Func<T1, T2, R> f) => /* 返回值 */;

这里的第一个=>只是方法定义的语法糖,替代了方法体的大括号和return关键字。

第二个=>:Lambda表达式语法

SwapArgs方法需要返回一个Func<T2, T1, R>类型的委托,这个委托的实现就是一个lambda表达式:(t2, t1) => f(t1, t2)。这和你例子里的divide变量赋值逻辑完全一致——它定义了一个接受t2和t1两个参数、执行f(t1, t2)并返回结果的函数。

对比你的divide例子

divide是一个委托变量,用lambda表达式直接赋值给它,结构是变量 = 参数 => 函数体。而SwapArgs是一个方法,它的返回值是一个lambda表达式,所以用表达式体方法语法(第一个=>)把方法体简化为直接返回这个lambda(第二个=>定义的函数)。

总结:

  • 第一个=>属于方法定义的语法,用来简化单返回值的方法体
  • 第二个=>属于Lambda表达式的语法,用来定义要返回的委托实例

内容的提问来源于stack exchange,提问作者Lazar Grbovic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 13:25:13