如何在C#中创建一个完全参数化的方法委托?

Ada*_*ynn 4 .net c# delegates

在c#中,我们可以通过各种方式创建委托(例如Action <>,Func <>,delegate,lambdas等).但是当您调用这些方法时,您必须为要调用的委托提供参数值:

delegate int del(int i);   
del myDelegate = x => x * x;
int j = myDelegate(5);
Run Code Online (Sandbox Code Playgroud)

c#中是否有一种方法可以封装方法委托WITH参数值?本质上是延迟调用完全参数化的方法?所以你不必在调用时提供参数值?

例如,这样的无效代码:

delegate int del(int i);   
del myDelegate(5) = x => x * x;
int j = myDelegate;
Run Code Online (Sandbox Code Playgroud)

我知道用例并不是很明显.在我正在查看的情况下,我有一个非确定性方法,我希望调用者能够调用而不必包含或了解方法所需的参数.实现此目的的一种方法是通过创建一个封装参数值和方法委托的类,并让调用者引用和调用该类.但我只是好奇是否有另一种更简洁的方式.

SLa*_*aks 12

这称为currying.

例如:

Action curried = () => myFunc(5);
Run Code Online (Sandbox Code Playgroud)

要么,

Func<int, int, int> multiplier = (x, y) => x * y;
Func<int, int> doubler = x => multiplier(x, 2);
int eight = doubler(4);
Run Code Online (Sandbox Code Playgroud)