Функции анонима приносят пользу только лямбдам - PullRequest
1 голос
/ 08 марта 2019

Я все еще читаю документацию о C # , и я упал на анонимные функции . Это правда, что они расставляют приоритеты лямбда-выражений, но,

Они также сказали сразу после:

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

Это (цитата) - это то, что я хочу понять с помощью нескольких примеров, если это необходимо. Спасибо.

1 Ответ

1 голос
/ 08 марта 2019

Если вы игнорируете параметры в делегате, то с помощью синтаксиса анонимной функции, используя 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.

...