Надеюсь, я правильно назвал название своего вопроса.
В С# я могу использовать lambdas (как делегаты) или старший синтаксис делегата для этого:
Func<string> fnHello = () => "hello";
Console.WriteLine(fnHello());
Func<string> fnHello2 = delegate()
{
return "hello 2";
};
Console.WriteLine(fnHello2());
Итак, почему я не могу "встроить" лямбда или тело делегата и не улавливать его в именованной переменной (делая ее анонимной)?
// Inline anonymous lambda not allowed
Console.WriteLine(
(() => "hello inline lambda")()
);
// Inline anonymous delegate not allowed
Console.WriteLine(
(delegate() { return "hello inline delegate"; })()
);
Пример, который работает в javascript (только для сравнения):
alert(
(function(){ return "hello inline anonymous function from javascript"; })()
);
Создает ожидаемое окно предупреждения.
UPDATE: Кажется, у вас может быть встроенная анонимная лямбда в С#, если вы настроили ее соответствующим образом, но количество() начинает расстраиваться.
// Inline anonymous lambda with appropriate cast IS allowed
Console.WriteLine(
((Func<string>)(() => "hello inline anonymous lambda"))()
);
Возможно, компилятор не может вывести sig анонимного делегата, чтобы узнать, какой Console.WriteLine() вы пытаетесь вызвать? Кто-нибудь знает, почему требуется конкретный отбор?