Warum kann c # anonyme Inline-Lambdas oder -Delegierte nicht verwenden? [Duplikat

Diese Frage hat hier bereits eine Antwort:

Warum muss ein Lambda-Ausdruck umgewandelt werden, wenn er als einfacher Delegate-Parameter angegeben wird 7 answers

ch hoffe, ich habe den Titel meiner Frage richtig formulier

In c # kann ich Lambdas (als Delegaten) oder die ältere Delegatensyntax verwenden, um dies zu tun:

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

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

Warum kann ich das Lambda oder den Stellvertreterkörper nicht "inline" und vermeiden, es in einer benannten Variablen zu erfassen (anonym zu machen)?

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

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

Ein Beispiel, das in Javascript funktioniert (nur zum Vergleich), ist:

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

Welche das erwartete Warnungsfeld erzeugt.

AKTUALISIERE: Es scheint, Siekönne Haben Sie ein anonymes Inline-Lambda in C #, wenn Sie es entsprechend umsetzen, aber die Menge an () macht es unruhig.

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

Möglicherweise kann der Compiler nicht anhand des Sig des anonymen Delegaten feststellen, welche Console.WriteLine () Sie aufrufen möchten. Weiß jemand, warum diese spezielle Besetzung erforderlich ist?