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?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage