我最近想出了如何从方法中返回方法/函数,例如:
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;
}
答案 0 :(得分:1)
由于不太清楚你想要实现什么,我会做一些猜测工作。
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
答案 1 :(得分:0)
如上所述回答问题 - 是的,可以使用如下所述的签名函数。
public static
Func<Func<string,int>,int>
PlusSomething(this Func<string, int> parser)
{
return x => 1;
}
然而,尚不清楚所需结果是什么以及输入应如何与所需输出相关;在语法上它是可能的。