在 C# 中,可以创建高阶函数,即。以函数g
为参数的函数。假设我想创建这样一个函数,它给出一个函数f
并返回另一个扩展其功能的函数。如何为返回的增强方法定义参数名称?动机是,我一般都在使用更高阶的方法,其中一些会产生新的方法。这些可能很难使用,因为它们没有附加参数名称等。
说明如何在 C# 中分别定义g
和定义的示例:f
我定义了一个方法 Extend,它可以扩展以 aT
作为参数并返回一个S
.
static class M
{
public static Func< T, S> Extend(Func< T, S> functionToWrap)
{
return (someT) =>
{
...
var result = functionToWrap(someT);
...
return result;
};
}
}
然后我们可以在我们的类上扩展一个方法而不改变方法。
class Calc2
{
public Func< int, int> Calc;
public Calc2()
{
Calc = M.Extend< int, int>(CalcPriv);
}
private int CalcPriv(int positiveNumber)
{
if(positiveNumber < 0) throw new Exception(...);
Console.WriteLine("calc " + i);
return i++;
}
}
唉,参数名称positiveNumber
不再可用,因为唯一可用的信息是Func<int, int> Calc
. 那是当我通过键入来使用扩展方法时new Calc2().Calc(-1)
,IDE 没有任何帮助,实际上我的论点是错误的。
如果我们可以定义 adelegate
并将其转换为 this 那就太好了,但是,这是不可能的。
有什么建议么?