Как передать действие с двумя параметрами, используя лямбда-выражение в метод? - PullRequest
9 голосов
/ 12 января 2010

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

Пример:

public CustomClass(Action<Path> insert)
{

  // logic here...

}

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

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

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

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

  // logic here...

}

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

Любая помощь будет принята с благодарностью.

Спасибо.

Ответы [ 4 ]

11 голосов
/ 12 января 2010

Чтобы передать в действие 2 параметра, просто определите действие вставки как Action<T,T2> и, когда вы его вызываете, сделайте это так:

var custom = new CustomClass((o,u) => {LayoutRoot.Children.Add(o); somethingElse(u)});
6 голосов
/ 12 января 2010

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

(x, y) => { x.DoSomething(); y.DoSomethingElse(); }
2 голосов
/ 12 января 2010

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

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

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

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

Подробнее о лямбда-синтаксисе можно узнать здесь, на MSDN .

2 голосов
/ 12 января 2010

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

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) );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...