Почему c # не может использовать встроенные анонимные лямбды или делегаты? [Дубликат]

На этот вопрос уже есть ответ здесь:

Почему должно быть приведено лямбда-выражение при предоставлении в виде простого параметра Delegate 7 ответов

Надеюсь, я правильно сформулировал название своего вопроса.

В c # я могу использовать лямбды (как делегаты) или более старый синтаксис делегата, чтобы сделать это:

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"; })()
);

Который производит ожидаемое окно предупреждения.

ОБНОВИТЬКажется, тыМожно иметь встроенную анонимную лямбду в C #, если вы разыгрываете соответствующим образом, но количество () начинает делать это неуправляемым.

// Inline anonymous lambda with appropriate cast IS allowed
Console.WriteLine(
    ((Func<string>)(() => "hello inline anonymous lambda"))()
);

Возможно, компилятор не может вывести сигнал анонимного делегата, чтобы узнать, какую Console.WriteLine () вы пытаетесь вызвать? Кто-нибудь знает, почему этот конкретный актерский состав требуется?

Ответы на вопрос(4)

Ваш ответ на вопрос