¿Por qué c # no puede usar lambdas o delegados anónimos en línea? [duplicar]

Esta pregunta ya tiene una respuesta aquí:

¿Por qué se debe convertir una expresión lambda cuando se proporciona como un parámetro Delegate simple? 7 respuestas

Espero haber redactado adecuadamente el título de mi pregunta.

En c # puedo usar lambdas (como delegados), o la sintaxis de delegado anterior para hacer esto:

Func<string> fnHello = () => "hello";
Console.WriteLine(fnHello());

Func<string> fnHello2 = delegate()
{
    return "hello 2";
};
Console.WriteLine(fnHello2());

Entonces, ¿por qué no puedo "en línea" el lambda o el cuerpo delegado, y evitar capturarlo en una variable con nombre (haciéndolo anónimo)?

// Inline anonymous lambda not allowed
Console.WriteLine(
    (() => "hello inline lambda")()
);

// Inline anonymous delegate not allowed
Console.WriteLine(
    (delegate() { return "hello inline delegate"; })()
);

Un ejemplo que funciona en javascript (solo para comparación) es:

alert(
    (function(){ return "hello inline anonymous function from javascript"; })()
);

Lo que produce el cuadro de alerta esperado.

ACTUALIZAR: Parece que túpuede tener una lambda anónima en línea en C #, si echas apropiadamente, pero la cantidad de () comienza a hacer que sea rebelde.

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

¿Quizás el compilador no puede inferir el signo del delegado anónimo para saber a qué Console.WriteLine () está intentando llamar? ¿Alguien sabe por qué se requiere este yeso específico?

Respuestas a la pregunta(4)

Su respuesta a la pregunta