这个奇怪的'链'Lambda (x =>() =比;y)

本文关键字:Lambda | 更新日期: 2023-09-27 18:14:42

我刚刚开始使用现有的代码库处理一个项目。在查看项目时,我发现了一个奇怪的lambda,我试图理解它。

代码如下:

SomeFunction(x => () => new Y());

我不明白…

  • 为什么回调中有两个=>操作符
  • ()的目的是什么?

参考SomeFunction的方法签名:

ISomeInterface<T> SomeFunction(Func<IXInterface, T> method);

这个奇怪的'链'Lambda (x =>() =比;y)

第一个lambda返回第二个lambda(一个函数),该函数返回一个新对象,在本例中为T类型。回想一下,函数(即委托)本身就是一级对象。

在一个普通的lambda函数中,有一个lambda形参"封闭"外部作用域,如下面的谓词所示:

x => x.SomeMember == true;

()只是一个占位符,表示"这里我不需要lambda参数,因为我不需要引用外部作用域。"(x)(x, y)也是有效的形式,因此()仅表示"没有指定lambda参数"。