How to pass action with two parameters using Lambd

2019-06-16 04:17发布

I have a class that takes an action in it's constructor.

Example:

public CustomClass(Action<Path> insert)
{

  // logic here...

}

I currently instantiate this class using the following line of code:

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

I want to modify the custom class to include an additional constructor, such as the following:

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

  // logic here...

}

However, my knowledge of lambda expressions is pretty basic, so I can't figure out how to instantiate the custom class, passing two parameters in the action to the new constructor.

Any help would be greatly appreciated.

Thanks.

4条回答
萌系小妹纸
2楼-- · 2019-06-16 04:20

In order to pass 2 parameters to the action, just define the insert action as an Action<T,T2> and when you call it do it like this:

var custom = new CustomClass((o,u) => {LayoutRoot.Children.Add(o); somethingElse(u)});
查看更多
我欲成王,谁敢阻挡
3楼-- · 2019-06-16 04:22

In Lamba you can pass two parameters as such:

(x, y) => { x.DoSomething(); y.DoSomethingElse(); }
查看更多
叼着烟拽天下
4楼-- · 2019-06-16 04:36

Either you are asking

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

or

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

The second constructor will take an delegate that receives 2 parameters. So you can do something like

CustomClass class = new CustomClass( (x,y) => DoSomething(x,y) );
查看更多
老娘就宠你
5楼-- · 2019-06-16 04:37

You can create a lambda expression that takes more than one parameter by surrounding the parameter list with parentheses and comma separate the parameters:

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

If you need to perform more than one statement in a lambda, you can surround the body of the lambda with braces:

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

You can learn more about lambda syntax here on MSDN.

查看更多
登录 后发表回答