繁体   English   中英

在C#中委派部分功能?

[英]Delegate partial function in C#?

我写了一些计算代表作为参数传递。

private delegate int CalculateDelegator(int value1, int value2);
CalculateDelegator addWith = add;
CalculateDelegator divWith = div;

private static int add(int value1, int value2) {
    return value1 + value2;
}

private static int div(int value1, int value2) {
    return value1 / value2;
}

接收addWith作为参数的方法link(CalculateDelegator method, int value2)保存value1,调用link的方法保存value2。 所以我总是把link()称为单独的paremeter。

有没有办法传递计算方法,包括第一个参数: link(addWith(value2)) (例如,像Scala中的部分函数)

您可以执行以下操作:

Func<int, int> partialMethod =
    value1 => addWith(value1, 5);

这样, partialMethod将接受一个参数并使用内部“holded”值传递它。

不,这样的东西在C#中是不可能的。

你可以做的是如下:

int link(Func<int, int> addWithValue2)
{
    return addWithValue2(value1);
}

你会这样称呼它:

link(v1 => addWith(v1, value2));

顺便说一句:我认为你所描述的概念叫做currying,有一个项目试图把它带到C#: https//github.com/ekonbenefits/impromptu-interface/wiki/UsageCurry 它基本上使用了这个答案中显示的方法。

据我了解你的问题,你需要为int创建一个扩展方法:

public static LinkExtension
{
    public static void Link(this int value, CalculateDelegator method)
    {
        // Link action here
    }
}

所以你只需要调用value2.Link(addWith)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM