如何使用Lambda表达式将两个参数传递给方法?

时间:2010-01-12 16:08:49

标签: c# silverlight lambda

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

示例:

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表达式的了解非常基础,所以我无法弄清楚如何实例化自定义类,将操作中的两个参数传递给新的构造函数。

非常感谢任何帮助。

感谢。

4 个答案:

答案 0 :(得分:11)

为了将2个参数传递给操作,只需将插入操作定义为Action<T,T2>,当您调用它时,请执行以下操作:

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

答案 1 :(得分:6)

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

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

答案 2 :(得分:2)

你问的是

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) );

答案 3 :(得分:2)

您可以通过用括号括起参数列表并使用逗号分隔参数来创建一个带有多个参数的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