[英]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.