Если вы игнорируете параметры в делегате, то с помощью синтаксиса анонимной функции, используя delegate
, вы можете пропустить их:
Action<int> a = delegate { Console.WriteLine("I am ignoring the int parameter."); }; //takes 1 argument, but not specified on the RHS
a(2); // Prints "I am ignoring the int parameter."
Нет способа сделать это с помощью лямбда-выражений:
Action<int> a = => { Console.WriteLine("I am ignoring the int parameter."); }; // syntax error
Action<int> a = () => { Console.WriteLine("I am ignoring the int parameter."); }; // CS1593 Delegate 'Action<int>' does not take 0 arguments
Это не очень полезно, но может быть немного удобно, когда вы знаете, что хотите что-то сделать для события, и даже не заботитесь о его подписи.
button.OnClick += delegate { Console.WriteLine("Button clicked and that's all I care about"); };
Исторически большое преимущество анонимных функций в C # 2.0 заключалось в том, что они существовали. Лямбда-синтаксис не был введен до C # 3.0.