微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在委托函数中使用参数?

如何解决如何在委托函数中使用参数?

我希望能够在我使用委托创建的方法中放入任意数量的变量。我认为这通常是您的做法,但似乎不起作用。

我正在尝试使用此处的 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 举报,一经查实,本站将立刻删除。