最近,我发现了如何从方法返回方法/函数,例如:
public static Func<string, int> Parse() {
return x => Int32.Parse(x);
}出于纯粹的好奇心,我想知道我能走多远。是否有可能以某种方式返回一个Func<Func<string, int>, int>
public static Func<Func<string, int>, int> PlusSomething(this Func<string, int> parser) {
return x => x + parser; //Obviously doesn't work
}我做的最接近的事就是
public static Func<string, int, int> PlusSomething(this Func<string, int> parser) {
return (x, y) => parser(x) + y;
}发布于 2017-02-22 11:05:11
由于不太清楚你想要实现什么,我要做一些猜测工作。
Func<Func<string, int>, int>是一个函数,它接受一个函数并返回一个int。
一种可能性是,您希望返回一个函数,该函数接受一个函数f,将其应用于一个字符串并返回一个int。在这种情况下,您必须指定要应用函数f的某个位置。或者当您生成函数时
public static Func<Func<string, int>, int> PlusSomething(string s) {
return f => f(s);
}无论是在应用该函数时
public static Func<Func<string, int>, int, int> PlusSomething() {
return f, s => f(s);
}看第二个例子,在我看来(我可能错了),您实际上希望返回一个带int的函数并返回一个函数。
public static Func<int, Func<string, int>> PlusSomething(Func<string, int> parser) {
return x => (y => x + parser(y));
}这将允许类似于
var gen = PlusSomething(parser);
var parsePlus4 = gen(4);
int x = parsePlus4("8"); // x == 12发布于 2017-02-22 10:40:31
要回答所述的问题--是的,有可能有一个具有所述签名的函数,如下所示。
public static
Func<Func<string,int>,int>
PlusSomething(this Func<string, int> parser)
{
return x => 1;
}然而,还不清楚期望的结果是什么,以及输入应该如何与期望的输出相关联;从语法上讲,这是可能的。
https://stackoverflow.com/questions/42388746
复制相似问题