How to pass action with two parameters using Lambda expression to method?
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> inse开发者_如何学Pythonrt)
{
// 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.
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)});
In Lamba you can pass two parameters as such:
(x, y) => { x.DoSomething(); y.DoSomethingElse(); }
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) );
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.
精彩评论