В принципе ответ Влада правильный, и вам не нужно заранее объявлять лямбда-функцию в качестве делегата.
За исключением того, что ситуация не так проста в C #, потому что компилятор не может решить, должно ли синтаксическое лямбда-выражение быть скомпилировано как делегат (например, Func<int>
) или дерево выражений (например, Expression<Func<int>>
), а также может быть любым другим совместимым типом делегата. Итак, вам нужно создать делегата:
int foo = new Func<int>(() => {
Console.WriteLine("bar"); return 1; })();
Вы можете немного упростить код, определив метод, который просто возвращает делегат, а затем вызвав метод - компилятор C # автоматически определит тип делегата:
static Func<R> Scope<R>(Func<R> f) { return f; }
// Compiler automatically compiles lambda function
// as delegate and infers the type arguments of 'Scope'
int foo = Scope(() => { Console.WriteLine("bar"); return 1; })();
Я согласен, что это уродливый трюк, который не должен использоваться :-), но это интересный факт, что это можно сделать!