Hay dos cosas aquí, el delegado genérico Func<int[], int>
en el LHS y la expresión lambda en el RHS. El primero no es posible, ya que un delegado Func<S, T>
se declara como:
public delegate TResult Func<in T, out TResult>(T arg); //ie no params involved
usted necesita su propio delegado que acepta params
de entrada como se muestra en la respuesta aceptada.
Este último, que es de lo que se trata el título de la pregunta, no es posible también en C#, pero por algún motivo.
El LHS de una expresión de asignación es una cosa en tiempo de compilación (a menos que sea dynamic
, por supuesto, pero de nuevo compilador es consciente de ello) y su lado derecho es una cosa de tiempo de ejecución (a menos que, por supuesto, en el caso de const
s). El compilador puede inferir lo que se tipea en LHS, pero obtiene los valores en RHS solo durante el tiempo de ejecución, es decir, cuando se ejecuta el código. Al escribir esto:
Func<int[], int> foo = ....
foo
siempre se considera como Func<int[], int>
. Agregará mucha complejidad al compilador si tuviera que descifrar RHS. Por ej.Si lo que estás intentando era posible, piense en este escenario:
Func<int[], int> foo = (params int[] numbers) =>
{
int result;
foreach(int number in numbers)
{
result += numbers;
}
return result;
};
//and later at some other place
foo = (int[] numbers) => 0;
//how would you call 'foo' now?
lugar cuando se escribe su propio delegado que acepta params
, usted está diciendo al compilador directamente (es decir, conocidos a partir LHS).
De las tres características que los parámetros de un soporte método llamado, es decir, out/ref
, params
, parámetro opcional, las expresiones lambda (o incluso el anterior delegate
sintaxis) de apoyo solamente out/ref
.
posible duplicado de [parámetros variables en C#] Lambda (http://stackoverflow.com/questions/3581118/variable-parameters-in-c-sharp-lambda) –
me pregunto si en realidad se puede llamar a eso una expresión lambda , Creo que es un método anónimo. –
@YuriyFaktorovich: Es una lambda. The => es el operador lambda. –