在C#中,可以创建更高阶的函数,即。函数g
将函数作为参数。假设我想创建一个给定函数f
的函数,并返回扩展其功能的另一个函数。 如何为返回的增强方法定义参数名称?的动机是,我正在使用更高阶的方法,其中一些产生新的方法..这些可能很难使用,因为没有参数名称等附加到他们。如何在C#中为高阶函数定义参数名称#
示出了如何g
f
和分别可在C#中定义的一个例子:
我定义的方法扩展可以EXTENS方法采取T
作为参数并返回一个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中得不到任何帮助,实际上我的论点是错误的。
如果我们可以定义一个delegate
并将其转换为此值将会很好,但这是不可能的。
有什么建议吗?
你需要知道参数名称?您在何处/如何在您发布的代码中使用它? – sepp2k 2010-10-28 21:15:03
有没有这样做是不同的,只是创建一个继承M和重写Extend的类? – 2010-10-28 21:23:19
以上是一个例子,而不是问题。问题是关于能够使用记录参数输入的更高阶方法创建方法 – 2010-10-28 21:25:56