如何返回Func <func <string,int =“”>,int&gt;

时间:2017-02-22 10:34:05

标签: c# function lambda

我最近想出了如何从方法中返回方法/函数,例如:

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;
}

2 个答案:

答案 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;
}

然而,尚不清楚所需结果是什么以及输入应如何与所需输出相关;在语法上它是可能的。