Действие <объект, EventArgs> не мог быть литым к EventHandler?

set noea
" i.e.
set equalalways

См. equalalways в документации Vim.

28
задан RCIX 11 October 2009 в 22:25
поделиться

4 ответа

Лямбды неявно преобразуются в типы делегатов с правильной формой, но два типа делегатов одинаковой формы не могут неявно преобразовываться друг в друга. Просто сделайте вместо этого локальную переменную типа EventHandler.

EventHandler h = (o, ea) => { ... };
e += h;
...
e -= h;

(в случае, если это поможет:

Action<object, EventArgs> a = (o, ea) => { }; 
EventHandler e = a;  // not allowed
EventHandler e2 = (o,ea) => a(o,ea);  // ok

)

38
ответ дан 28 November 2019 в 02:32
поделиться
Action<Object, EventArgs> a = (o, ea) => { };
EventHandler e = a.Invoke;
41
ответ дан 28 November 2019 в 02:32
поделиться

Как правило, делегаты не могут быть преобразованы, потому что у них нет дерева наследования, определяющего, какие преобразования допустимы. Для этого у вас есть два варианта:

  1. Использовать переменную типа EventHandler вместо Action
  2. Использовать встроенное объявление.

     // параметр 1: локальная переменная
    EventHandler eh = (o, ea) => {/ * [snip] * /};
    obj.event + = а;
    obj.event - = а;
    
    // вариант 2: встроенное объявление
    obj.event + = (o, ea) => {/ * [snip] * /};
    
2
ответ дан 28 November 2019 в 02:32
поделиться

Вместо этого вы можете использовать анонимный метод:

Event += (sender, e) =>
{
     // Multiple lines
     // of code here
};
0
ответ дан 28 November 2019 в 02:32
поделиться
Другие вопросы по тегам:

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