如何解决如何在委托函数中使用参数?
我希望能够在我使用委托创建的方法中放入任意数量的变量。我认为这通常是您的做法,但似乎不起作用。
我正在尝试使用此处的 h(x,y,z)
delegate double MyFunction1(double x);
delegate double MyFunction2(double x,double y);
delegate double MyFunction(double x,params double[] args);
static void Main(string[] args)
{
MyFunction1 f = x => x;
MyFunction2 g = (x,y) => x * y;
MyFunction h = (x,z) => x * y * z;
}
解决方法
您需要将 h
定义为接受 A double[]
的方法。 params
作为单独的参数被调用,但作为一个数组传递给方法:
delegate double MyFunction(params double[] args);
static void Main(string[] args)
{
MyFunction h = args => {
var result = 1.0;
foreach (var value in args) { result *= value; };
return result;
};
}
那么你可以这样称呼它:
h(3,4,5)
查看here上的示例
,params
允许 调用者 传入任意数量的参数。它不允许被调用者处理他们想要的任意数量的参数。
所以 h
必须能够处理任何正数的参数。需要这样写:
MyFunction h = (x,rest) => ...;
x
是一个 double
,而 rest
是一个可以包含 0 个或多个元素的 double[]
。
如果你想计算所有参数的乘积:
MyFunction h = (x,rest) => x * rest.Aggregate(1.0,(y,z) => y * z);
如果您只想处理 3 个参数,请改用这样的委托:
delegate double MyFunction3(double x,double y,double z);
没有允许您指定要处理的参数数量的委托类型。毕竟,调用者怎么知道给你多少参数?
,试试这个。
delegate double MyFunction(double x,params double[] args);
class Program
{
static public double Hoo(double x,params double[] args)
{
foreach (var item in args)
{
x *= item;
}
return x;
}
static void Main(string[] args)
{
MyFunction h = Hoo;
Console.WriteLine($"h (with 1 params) : {h.Invoke(5)}");
Console.WriteLine($"h (with 2 params) : {h.Invoke(5,5)}");
Console.WriteLine($"h (with 3 params) : {h.Invoke(5,5,5)}");
Console.WriteLine($"h (with 4 params) : {h.Invoke(5,5)}");
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。