Я нашел два разных способа инициализации делегата с действием:
Создайте новое действие или кастинг для Action.
Delegate foo = new Action(() => DoNothing(param));
Delegate bar = (Action)(() => DoNothing(param));
Есть ли разница между этими двумя синтаксисами?
Какой из них лучше и почему?
Делегат используется в этом примере, потому что синтаксис полезен для вызова таких методов, как BeginInvoke или Invoke, с помощью выражения лямбда, и важно, чтобы выражение лямбда превратилось в действие
static main
{
Invoke((Action)(() => DoNothing())); // OK
Invoke(new Action(() => DoNothing())); // OK
Invoke(() => DoNothing()); // Doesn't compil
}
private static void Invoke(Delegate del) { }
Но интересно, что компилятор разрешил это:
Action action = () => DoNothing();
Invoke(action);