Здесь есть две вещи: общий делегат Func<int[], int>
на LHS и выражение лямбда на RHS. Первое не представляется возможным, так как Func<S, T>
делегат объявляется как:
public delegate TResult Func<in T, out TResult>(T arg); //ie no params involved
Вам нужно свой собственный делегат, который принимает params
вход, как показано в общепринятом ответ.
Последнее, о чем идет речь в вопросе, также не возможно в C#, , но по причине.
и LHS выражения присваивания является время компиляции вещи (если это не dynamic
, конечно, но опять компилятор знает об этом) и его RHS является время выполнения вещи (если, конечно, в случае const
с). Компилятор может сделать вывод о том, что напечатано на LHS, но он получает значения в RHS только во время выполнения, то есть при запуске кода. При вводе этого:
Func<int[], int> foo = ....
foo
всегда рассматривается как Func<int[], int>
. Это добавит сложности для компилятора, если потребуется расшифровать RHS. Напр.если то, что вы пытаетесь возможно, думать об этом сценарии:
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?
Вместо когда вы пишете свой собственный делегат, который принимает params
, вы сообщаете компилятору непосредственно (то есть известный из LHS).
Из трех функций, параметры именованной поддержки методы, т.е. out/ref
, params
, необязательный параметра, лямбда-выражение (или даже ранее delegate
синтаксиса) поддерживает только out/ref
.
Возможный дубликат [Переменные параметры в C# Лямбда] (http://stackoverflow.com/questions/3581118/variable-parameters-in-c-sharp-lambda) –
Интересно, можете ли вы на самом деле назвать это выражение Лямбды , Я думаю, что это анонимный метод. –
@YuriyFaktorovich: Это лямбда. The => - лямбда-оператор. –