c# - 具有可变数量参数的匿名方法

标签 c# lambda anonymous-function parameters

我有以下代码创建一个匿名类型的实例,该实例具有一个方法作为唯一的成员:

var test = new { 
    f = new Func<int, int>(x => x)
};

我想实现一个将所有参数相加的函数,无论传递了多少。这是正常方法的样子:

int Sum(params int[] values) { 
    int res = 0;
    foreach(var i in values) res += i;
    return res;
}

但是,我不知道这是否适用于匿名方法。我试过了 Func<params int[], int> ,但显然不会编译。有什么方法可以编写带有可变参数列表或至少带有可选参数的匿名方法吗?

编辑:我想要实现的是像这样调用(匿名)求和方法:test.Sum(1, 2, 3, 4) .

最佳答案

为了实现这一点,首先你需要声明一个委托(delegate):

delegate int ParamsDelegate(params int[] args);

然后在分配匿名类型对象的方法属性时使用它。

var test = new {
    Sum = new ParamsDelegate(x => x.Sum()) // x is an array
};

那么你有两种方式调用这个方法:

1) int sum = test.Sum(new [] { 1, 2, 3, 4 });

2) int sum = test.Sum(1, 2, 3, 4);

关于c# - 具有可变数量参数的匿名方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33300824/

相关文章:

c# - 禁止调整 Windows Forms 窗体的大小

python - Tensorflow <lambda>() 获得意外的关键字参数 'partition_info'

c++ - 将编译器生成的C++ lambda名称更改为易于阅读的名称

javascript - 在 JavaScript 事件代码中对回调和参数使用匿名函数而不是命名函数有什么好处?

php - 如何编码/引用易于为我的 IDE 管理的 PHP 可调用函数

javascript - 您可以在 Google Script 中为 array.forEach 添加标签吗?

c# - 字符串拆分逻辑 C#

c# - 我如何知道 UdpClient 是否已关闭/处置?

c++ - 如何禁用隐式 lamba 变量捕获?

c# - javascript中的日期解析问题