Как передать действие с двумя параметрами с помощью Лямбда-выражения для метода?

У меня есть класс, который принимает меры в, он - конструктор.

Пример:

public CustomClass(Action<Path> insert)
{

  // logic here...

}

Я в настоящее время инстанцирую этого класса с помощью следующей строки кода:

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

Я хочу изменить пользовательский класс для включения дополнительного конструктора, такого как следующее:

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

  // logic here...

}

Однако мои знания лямбда-выражений являются довольно элементарными, таким образом, я не могу выяснить, как инстанцировать пользовательского класса, передав два параметра в действии новому конструктору.

Любая справка значительно ценилась бы.

Спасибо.

9
задан Chris 12 January 2010 в 16:12
поделиться

4 ответа

Чтобы передать 2 параметра этому действию, просто определите его как Действие, а когда вы его вызываете, сделайте так:

var custom = new CustomClass((o,u) => {LayoutRoot.Children.Add(o); somethingElse(u)});
11
ответ дан 4 December 2019 в 10:04
поделиться

В Lamba можно передать два параметра как таковых:

(x, y) => { x.DoSomething(); y.DoSomethingElse(); }
6
ответ дан 4 December 2019 в 10:04
поделиться

Либо вы спрашиваете

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) );
2
ответ дан 4 December 2019 в 10:04
поделиться

Вы можете создать экспресс лямбда, который требуется более одного параметра, окружающий список параметров с скобками и запятыми отделить параметры:

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

, если вам нужно выполнить более одного оператора в лямбде , вы можете окружить тело лямбда с брекетами:

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

Вы можете узнать больше о синтаксиса лямбда здесь на MSDN .

2
ответ дан 4 December 2019 в 10:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: