我写了一些计算代表作为参数传递。
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;
}
接收link(CalculateDelegator method, int value2)
作为参数的方法addWith
保存value1,调用link
的方法保存value2。所以我总是将link()称为单独的paremeter。
有没有办法传递计算方法,包括第一个参数:link(addWith(value2))
?
(例如,作为Scala中的部分函数)
答案 0 :(得分:1)
您可以执行以下操作:
Func<int, int> partialMethod =
value1 => addWith(value1, 5);
这样partialMethod
将接受一个参数并将其传递给内部'holded'值。
答案 1 :(得分:1)
不,这样的东西在C#中是不可能的。
您可以做的事情如下:
int link(Func<int, int> addWithValue2)
{
return addWithValue2(value1);
}
你会这样称呼:
link(v1 => addWith(v1, value2));
BTW:我认为你所描述的概念叫做currying,有一个项目试图把它带到C#:https://github.com/ekonbenefits/impromptu-interface/wiki/UsageCurry。它基本上使用了这个答案中显示的方法。
答案 2 :(得分:0)
据我了解您的问题,您需要为int
创建一个扩展方法:
public static LinkExtension
{
public static void Link(this int value, CalculateDelegator method)
{
// Link action here
}
}
所以你只需致电value2.Link(addWith)
。