Чтобы уточнить ответ tvanfosson; это поведение описано в спецификации языка C # 3.0 (§7.14):
Поведение лямбда-выражений и
выражения-аноним-метод-это
То же самое, за исключением следующих пунктов:
• разрешение выражений для анонимных методов
список параметров, который нужно опустить
полностью, уступая конвертируемости
делегировать типы любого списка значений
параметры.
• параметр разрешения лямбда-выражений
типы, которые будут опущены и выведены
тогда как выражения-аноним-метод-выражения
требовать, чтобы типы параметров были
прямо указано.
• Тело лямбда-выражения может
быть выражением или блоком операторов
в то время как тело
Выражение anonymous-method-expression должно быть
Блок выписки.
• Поскольку только лямбда-выражения могут
есть выражение тела, нет
Выражение anonymous-method-expression может быть
успешно преобразован в
тип дерева выражений (§4.6).
Я думаю:
Action<int> action = () => Console.WriteLine("lambda");
эквивалентно:
Action<int> action = delegate() { Console.WriteLine("delegate"); };
, который тоже не будет компилироваться. Как говорит Даниэль Плейстед, () прямо говорит, что нет никаких параметров.
Если существует эквивалент делегата {}, это может быть:
Action<int> action = => Console.WriteLine("lambda")
Что не очень красиво, и я подозреваю, что это подозрение не в духе лямбда-выражений.