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 answersch 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?