C#方法可以返回一个方法吗?

C#中的方法可以返回一个方法吗?

例如,一个方法可以返回一个lambda表达式 ,但是我不知道我可以为这样的方法提供什么类型的参数,因为一个方法不是Type 。 这样的返回方法可以分配给某个委托。

以此概念为例:

 public  QuadraticFunctionMaker(float a , float b , float c) { return (x) => { return a * x * x + b * x + c; }; } delegate float Function(float x); Function QuadraticFunction = QuadraticFunctionMaker(1f,4f,3f); 

您正在寻找的类型是Action<>Func<>

两种类型的通用参数确定方法的类型签名。 如果您的方法没有返回值,请使用Action 。 如果它有返回值,请使用Func ,其中最后一个generics参数是返回类型。

例如:

 public void DoSomething() // Action public void DoSomething(int number) // Action public void DoSomething(int number, string text) // Action public int DoSomething() // Func public int DoSomething(float number) // Func public int DoSomething(float number, string text) // Func 
 public Func QuadraticFunctionMake(float a, float b, float c) { return x => a * x * x + b * x + c; } 

返回类型是Func

= Function 。 那是,

 public Function QuadraticFunctionMaker(float a , float b , float c) { return (x) => { return a * x * x + b * x + c; }; } 

你正在寻找什么,因为你已经宣布委托Function匹配。 或者,您根本不需要声明委托,并且可以使用其他人注意到的Func 。 这完全相同。 事实上, Func的声明方式与委托Function完全相同,只是它是通用的。

你的lambda表达式将float作为参数(我相信),然后返回一个float 。 在.NET中 ,我们可以通过类型Func来表示它。

通常,如果您正在处理需要更多参数的lambda,则可以使用Func ,最多包含八个参数。

我认为你需要Action 委托定义。 我希望文章Action 代表可以帮助你。

您可以使用dynamic关键字。 请参阅dynamic(C#参考)

我认为,元组适合你的情况。 有关更多信息,请查看http://sankarsan.wordpress.com/2009/11/29/tuple-in-c-4-0/ 。