У меня есть класс, который принимает меры в, он - конструктор.
Пример:
public CustomClass(Action<Path> insert)
{
// logic here...
}
Я в настоящее время инстанцирую этого класса с помощью следующей строки кода:
var custom = new CustomClass((o) => LayoutRoot.Children.Add(o));
Я хочу изменить пользовательский класс для включения дополнительного конструктора, такого как следующее:
public CustomClass(Action<Path, TextBlock> insert)
{
// logic here...
}
Однако мои знания лямбда-выражений являются довольно элементарными, таким образом, я не могу выяснить, как инстанцировать пользовательского класса, передав два параметра в действии новому конструктору.
Любая справка значительно ценилась бы.
Спасибо.
Чтобы передать 2 параметра этому действию, просто определите его как Действие
, а когда вы его вызываете, сделайте так:
var custom = new CustomClass((o,u) => {LayoutRoot.Children.Add(o); somethingElse(u)});
В Lamba можно передать два параметра как таковых:
(x, y) => { x.DoSomething(); y.DoSomethingElse(); }
Либо вы спрашиваете
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) );
Вы можете создать экспресс лямбда, который требуется более одного параметра, окружающий список параметров с скобками и запятыми отделить параметры:
var custom = new CustomClass((o, tb) => /* use both params somehow */ );
, если вам нужно выполнить более одного оператора в лямбде , вы можете окружить тело лямбда с брекетами:
var custom = new CustomClass((o, tb) => { o.DoSomething(); tb.DoSomethingElse() } );
Вы можете узнать больше о синтаксиса лямбда здесь на MSDN .