【问题标题】:Strange lambda expression [duplicate]奇怪的 lambda 表达式
【发布时间】:2015-07-06 13:50:50
【问题描述】:

我正在浏览一些 c# 源代码,遇到了这段代码,我不明白。

someVariable += (s,_) => this.Close();

这里发生了什么?

【问题讨论】:

  • 下划线是一个有效的变量名,它应该表示最有可能没有使用的变量。
  • _ 是一个有效的变量名。例如:var _ = 2;
  • 你问的是下划线还是+=? (这是一个事件订阅)。

标签: c# lambda


【解决方案1】:

下划线是一个有效的变量名。它应该表示最有可能未使用的变量。

我这样用它来表示变量不再被使用:

someVariable += (_,__) => this.Close();

【讨论】:

  • 我真的不明白,有没有参考可以让我学习?我通常只将 lambda 用于函数列表(select、where、groupby 等..)
  • 下划线是混淆的根源还是形式的一般表达:someVariable += (s,e) => this.Close();?
  • 我希望你不要有太多未使用的参数..._, __, ___, ____ :-)
【解决方案2】:

正如其他人已经说过的,s 和 _ 是用作匿名方法参数的变量。
为了您的理解,这个

someVariable += (s,_) => this.Close();

和

差不多
someVariable += AnonymousMethod;

private void AnonymousMethod(object s, object _) 
{
   this.Close();
}

方法的参数类型由事件someVariable的定义自动推断。我使用了object,因为我们不知道事件是如何定义的。

【讨论】:

    【解决方案3】:

    s 和 _ 仅用于此 lambda 函数中未使用的参数。

    【讨论】:

      猜你喜欢
      • 2011-01-02
      • 2018-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多