Перепишите лямбда-метод расширения - PullRequest
2 голосов
/ 29 января 2010

Я создал метод расширения, который работает так, как я хотел.Я заметил, что каким-то образом параметры party и property копируются в лямбда-выражение.Таким образом, мне не нужно поддерживать пользовательский список ассоциаций редактора / партии / собственности.

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

Итак, мой вопрос - как мне переписать этот метод, чтобы делегат можно было удалить?Или какой другой подход я могу использовать для обработки определенного обработчика событий с дополнительными параметрами (такими как party и property)?

private static void SetupAddressButtonClickEvent(this ButtonEdit editor, Party party, string property)
{
    editor.SetAddressDisplayText(party, property);
    editor.ButtonClick += (sender, e) =>
        {
            party.ShowAddressLookupDialog(property);
            editor.SetAddressDisplayText(party, property);
        };
}

Спасибо, Стефан

1 Ответ

3 голосов
/ 29 января 2010
Action<object,EventArgs> myaction = (sender, e) =>
        {
            party.ShowAddressLookupDialog(property);
            editor.SetAddressDisplayText(party, property);
        };

editor.ButtonClick += myaction;
editor.ButtonClick -= myaction;

изменить вариант 2 может быть:

class MyEventHandler
{
  ... _property;
  ... _party;
  ... _editor;
  public MyEventHandler(... property, ... party, ... editor)
  {
    _property = property;
    _party = party;
    _editor = editor;
  }

  public void Handler(object sender, EventArgs e)
  {
    _party.ShowAddressLookupDialog(_property);
    _editor.SetAddressDisplayText(_party, _property);
  }
}

, а затем используйте его так:

var handler = new MyEventHandler(party,property,editor);
editor.ButtonClick += handler.Handler;

Я не уверен, насколько это вам поможет, потому что я не на 100% понимаю, что вы пытаетесь решить.

...