【问题标题】:Lambda syntax looking like this: () => [duplicate]Lambda 语法如下所示:() => [重复]
【发布时间】:2016-07-01 03:12:19
【问题描述】:

我遇到了一个无法追踪的 lambda 语法

Action act = () => object.Foo(null);

这应该如何解释?我知道如何使用 lambda 表达式,但这个我不清楚。

【问题讨论】:

标签: c# lambda


【解决方案1】:
Action act = () => object.Foo(null);

等价于(不一样)

private void act(){ object.Foo(null); }

其中act 是您调用内联而不是在您的类中定义它的方法。

Action 是一个不返回结果的委托。还有一个类似的类型叫做Func,它确实会返回一个结果。

【讨论】:

  • 不完全是。除了您缺少 void 的事实之外,虽然它们可能具有相同的行为,但它们从根本上并不是一回事。附言- 投反对票的不是我。
  • @series0ne - 我应该使用等效的、更好的措辞。不,它们不一样,但归根结底,Action 是一种可以执行的方法(Delegate)。我修改了我的描述。
  • 我会根据您的编辑进行投票,但行为不是匿名的......它被称为“行为”
  • @DavidEtler - 不。动作类型不返回结果(基本上是一个 void 方法)。如果您想返回 object.Foo 的结果,那么它将是 Func 并将返回类型指定为泛型。
  • @DavidEtler - 不一定。在这种情况下,类型 Action 不返回任何内容,它与 lamda 本身无关。如果您更改我在示例中提供的代码并保留私有方法act,您可以在类代码“Action someAction = this.act;”的其他位置添加一行因为 act 是 void 并且 Action 是不返回结果的方法的方法指针(委托)。请参阅Action Delegate 了解更多信息。
【解决方案2】:

这是一个没有任何参数的 lambda 表达式。你会这样使用它:

act();

如果有参数,例如:

Action act = x => object.Foo(x);

然后你会这样使用它:

act(2);

【讨论】:

    猜你喜欢
    • 2018-02-16
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 2018-06-29
    • 2012-08-18
    • 2020-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多