如何在c#中返回委托函数或lambda表达式?

Wei*_* Ma 14 c# generics lambda

我正在尝试编写一个方法来返回自己的实例.伪代码是

Func<T,Func<T>> MyFunc<T>(T input)
{
    //do some work with input
    return MyFunc;
}
Run Code Online (Sandbox Code Playgroud)

看起来很简单.但我在定义返回类型时遇到问题.返回类型应该是委托

 which takes T as parameter, then returns a function 
 which takes T as parameter, then returns a function 
 which takes T as parameter, then returns a function

   ...recursive definition
Run Code Online (Sandbox Code Playgroud)

我确信有一些我没注意到的微妙之处.有人可以为我指出它吗?谢谢.

por*_*ges 15

你可以这样做:

delegate F<T> F<T>(T obj);

F<T> MyFunc<T>(T obj)
{
    return MyFunc;
}
Run Code Online (Sandbox Code Playgroud)

但它几乎没用.你唯一能做的就是这样,这很奇怪:

void Main()
{
    MyFunc(1)(2)(3)(4);
}

delegate F<T> F<T>(T obj);

F<T> MyFunc<T>(T obj)
{
    Console.WriteLine(obj);
    return MyFunc;
}
Run Code Online (Sandbox Code Playgroud)

  • 有趣的用例:) (4认同)