Espero haber redactado el título de mi pregunta de manera apropiada.¿Por qué no puedo usar # lambdas o delegados anónimos en línea?
en C# que puedo utilizar lambdas (como delegados), o la sintaxis delegado más para hacer esto:
Func<string> fnHello =() => "hello";
Console.WriteLine(fnHello());
Func<string> fnHello2 = delegate()
{
return "hello 2";
};
Console.WriteLine(fnHello2());
¿Por qué no puedo "en línea" de la lambda o el cuerpo de delegados, y evitar la captura en una variable con nombre (por lo que es 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 (sólo para comparación) es:
alert(
(function(){ return "hello inline anonymous function from javascript"; })()
);
que produce el cuadro de alerta esperado.
ACTUALIZACIÓN: Parece que puede tiene una lambda en el anonimato en línea en C#, si lanzas apropiadamente, pero la cantidad de arranques ('s) para que sea ingobernable.
// Inline anonymous lambda with appropriate cast IS allowed
Console.WriteLine(
((Func<string>)(() => "hello inline anonymous lambda"))()
);
Tal vez el compilador no puede inferir la firma del delegado anónimo para saber qué Console.WriteLine() que está tratando de llamar? ¿Alguien sabe por qué se requiere este elenco específico?
Considere esto: 'public static R Eval (Func m) {return m();}'. A continuación, puede decir 'Eval (() => {return" test ";})' que es un poco más agradable, o incluso 'Eval (() => {return" test ";})'. –
Ben