params []可以作为lambda表达式的参数吗?

And*_*ray 11 c# lambda closures params-keyword

我最近开始探索lambda表达式,我想到了一个问题.假设我有一个需要不确定数量参数的函数.我会使用params关键字来建模可变数量的参数.

我的问题:我可以用Lambda表达式做类似的事情吗?例如:

Func<int[], int> foo = (params numbers[]) =>
                       {
                           int result;

                           foreach(int number in numbers)
                           {
                               result += numbers;
                           }

                           return result;
                       }
Run Code Online (Sandbox Code Playgroud)

如果是这样,两个子问题就出现了 - 是否有一种'好'的方式来编写这样的表达式,我甚至想在某个时候写出这样的表达式?

Nik*_*sev 14

好吧,有点.首先,Func<>您需要定义自定义委托,而不是使用它:

public delegate int ParamsFunc (params int[] numbers);
Run Code Online (Sandbox Code Playgroud)

然后,您可以编写以下lambda:

ParamsFunc sum = p => p.Sum();
Run Code Online (Sandbox Code Playgroud)

并使用可变数量的参数调用它:

Console.WriteLine(sum(1, 2, 3));
Console.WriteLine(sum(1, 2, 3, 4));
Console.WriteLine(sum(1, 2, 3, 4, 5));
Run Code Online (Sandbox Code Playgroud)

但说实话,坚持内置Func<>代表真的要简单得多.

  • 这正是我想要的.谢谢你:D (2认同)