Анонимные функции без входных параметров

Я пытаюсь понять синтаксис С# для анонимных функций, и что-то для меня не имеет смысла. Почему это допустимо

 Func<string, string> f = x => { return "Hello, world!"; };

но это не?

 Func<string> g = { return "Hello, world!"; };

Ответ 1

Второй по-прежнему требует синтаксис лямбда:

Func<string> g = () => { return "Hello, world!"; }; 

Во-первых, вы эффективно пишете:

Func<string, string> f = (x) => { return "Hello, world!"; };

Но С# позволит вам отказаться от () при определении лямбда, если есть только один аргумент, позволяя вместо этого писать x =>. Если аргументов нет, вы должны включить ().

Это указано в разделе 7.15 спецификации языка С#:

В анонимной функции с одним, неявным образом типизированным параметром круглые скобки могут быть опущены из списка параметров. Другими словами, анонимная функция формы

(param) = > expr

может быть сокращен до

param = > expr

Ответ 2

Вам нужно знать определение функции:

Инкапсулирует метод с одним параметром и возвращает значение тип, заданный параметром TResult.

Литература:

Microsoft