我有一个关于Func
和Action
委托的问题。
我只是想知道为什么你不能直接这样做:
public static int addTowNumber(int a, int b)
{
return a + b;
}
Func<int, int, int> add = addTowNumber(1,2);
但你必须这样做:
Func<int, int, int> add = addTowNumber;
var addNumber = add(1, 2);
Console.WriteLine(addNumber);
通过传递参数,您实际上是在调用该方法,并返回一个int
。
要存储对稍后调用的函数的引用,您不传递参数,这就是为什么这是正确的:
Func<int, int, int> add = addTowNumber;
然后,您可以在调用时提供任何您喜欢的参数:
int result1 = add(1, 2);
int result2 = add(3, 4);
如果你想推迟一个带有预定义参数的方法的执行,这似乎是你想要做的,你需要创建一个这样的闭包:
Func<int> add = () => addTowNumber(1, 2);
int result = add();