我有以下代码创建一个匿名类型的实例,该实例具有一个方法作为唯一的成员:
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/