Estoy buscando una buena explicación de por qué una pieza de código no se puede compilar y la otra compila muy bien.¿Por qué los paréntesis alrededor de la sentencia lambda causan un error de sintaxis?
falla:
richTextBox1.Invoke(new MethodInvoker((() => { richTextBox1.AppendText("test"); })));
da el error
Nombre de método espera
en el paréntesis de apertura justo después MethodInvoker(
. Aparentemente, no puedo ajustar mis declaraciones de lambda entre paréntesis.
Compila:
richTextBox1.Invoke(new MethodInvoker(() => { richTextBox1.AppendText("test"); }));
La pregunta es - ¿por qué?
Siempre he dado por hecho que podría envolver cualquier parámetro de método entre paréntesis si quisiera pero aparentemente ese no es el caso con las expresiones lambda. Entiendo que son algo especiales, pero todavía no puedo ver una buena razón para esto. Tal vez no entiendo algo sobre la sintaxis. Realmente me gustaría obtenerlo.
Por cierto, esto se presenta en VS2008, .NET 3.5 SP1, aún no lo he probado en VS2010 y .NET 4.
Gracias, eso tiene sentido. Solo por curiosidad, ¿puedes dar un ejemplo de ese lugar? – Dyppl
@Dyppl: 'Func F() {return (() => 1); } 'es legal, pero según la especificación no debería ser. –
jason
gracias! Bueno, entonces me siento un poco mejor con mi pregunta. Tal inconsistencia arruinará tu cabeza eventualmente – Dyppl