【问题标题】:How to pass action with two parameters using Lambda expression to method?如何使用 Lambda 表达式将带有两个参数的操作传递给方法?
【发布时间】:2015-06-17 05:18:42
【问题描述】:

我有一个类在它的构造函数中执行操作。

例子:

public CustomClass(Action<Path> insert)
{

  // logic here...

}

我目前使用以下代码行实例化这个类:

var custom = new CustomClass((o) => LayoutRoot.Children.Add(o));

我想修改自定义类以包含一个额外的构造函数,例如:

public CustomClass(Action<Path, TextBlock> insert)
{

  // logic here...

}

但是,我对 lambda 表达式的了解非常基础,所以我无法弄清楚如何实例化自定义类,将操作中的两个参数传递给新的构造函数。

任何帮助将不胜感激。

谢谢。

【问题讨论】:

  • 供您将来参考,C# 规范的第 7.14 节中描述了不同形式的 lambda 表达式的语法。
  • @Eric:当然,所有 C# 开发人员都已经阅读过规范。

标签: c# silverlight lambda


【解决方案1】:

为了将 2 个参数传递给操作,只需将插入操作定义为 Action&lt;T,T2&gt;,然后在调用它时执行以下操作:

var custom = new CustomClass((o,u) => {LayoutRoot.Children.Add(o); somethingElse(u)});

【讨论】:

  • 两个构造函数并不意味着相同 - 我忘记将我的代码 sn-ps 格式化为“代码”,所以当我发布原始问题时,构造函数似乎相同,所以我编辑了将sn-ps格式化为代码的帖子,现在构造函数应该不同。无论如何,您的回答有效,再次感谢!
【解决方案2】:

在 Lamba 中,您可以像这样传递两个参数:

(x, y) => { x.DoSomething(); y.DoSomethingElse(); }

【讨论】:

  • 是的,但您还应该向他展示如何更改他的构造函数以便能够接受 Action
  • 我相信如果它是一个复合语句,你需要在主体周围使用花括号: (x, y) => { x.DoSomething(); y.DoSomethingElse(); }
  • 这里是否缺少一对 { }?
  • @Dathan,抱歉刚刚编辑过,最初提出问题时它不存在。
  • 哈! @Tony 你打了我几秒钟:P 但我没有忘记 {}!而且他最初没有正确的构造函数;)
【解决方案3】:

你在问什么

public CustomClass(Action insert, Action insert2) { // logic here... }

 public CustomClass(Action<T1, T2> insert) { // logic here... }

第二个构造函数将接受一个接收 2 个参数的委托。所以你可以做类似的事情

CustomClass class = new CustomClass( (x,y) => DoSomething(x,y) );

【讨论】:

    【解决方案4】:

    您可以创建一个接受多个参数的 lambda 表达式,方法是用括号将参数列表括起来并用逗号分隔参数:

    var custom = new CustomClass((o, tb) => /* use both params somehow */ );
    

    如果您需要在 lambda 中执行多个语句,可以用大括号将 lambda 的主体括起来:

    var custom = new CustomClass((o, tb) => { o.DoSomething(); tb.DoSomethingElse() } );
    

    您可以了解更多关于lambda syntax here on MSDN的信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多