C#中的方法可以返回一个方法吗?
例如,方法可以返回lambda expression,但我不知道我可以为这种方法提供什么类型的参数,因为方法不是Type
。这样的返回方法可以分配给某个委托。
以此概念为例:
public <unknown type> 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);
答案 0 :(得分:37)
您要查找的类型有Action<>
或Func<>
。
两种类型的通用参数确定方法的类型签名。如果您的方法没有返回值,请使用Action
。如果它具有返回值,则使用Func
,其中最后一个通用参数是返回类型。
例如:
public void DoSomething() // Action
public void DoSomething(int number) // Action<int>
public void DoSomething(int number, string text) // Action<int,string>
public int DoSomething() // Func<int>
public int DoSomething(float number) // Func<float,int>
public int DoSomething(float number, string text) // Func<float,string,int>
答案 1 :(得分:19)
public Func<float, float> QuadraticFunctionMake(float a, float b, float c) {
return x => a * x * x + b * x + c;
}
返回类型为Func<float, float>
。
答案 2 :(得分:2)
<unknown type>
= Function
。也就是说,
public Function QuadraticFunctionMaker(float a , float b , float c)
{
return (x) => { return a * x * x + b * x + c; };
}
您正在寻找的是因为您已经宣布代理人Function
匹配。或者,您根本不需要声明委托,并且可以使用其他人注意到的Func<float, Float>
。这完全相同。实际上,Func<T, T>
的声明方式与委托Function
完全相同,只是它是通用的。
答案 3 :(得分:0)
你的lambda表达式将float
作为参数(我相信),然后返回float
。在.NET中,我们可以通过Func<float, float>
类型来表示这一点。
通常,如果你正在处理带有更多参数的lambda,你可以使用Func<Type1, Type2, Type3, ..., ReturnType>
,最多包含8个参数。
答案 4 :(得分:0)
我认为你需要Action&lt; T&gt;代表定义。我希望文章 Action<T> Delegate 可以帮到你。
答案 5 :(得分:-1)
您可以使用dynamic
关键字。请参阅 dynamic (C# Reference) 。
答案 6 :(得分:-3)
我认为,元组适合你的情况。有关详细信息,请查看http://sankarsan.wordpress.com/2009/11/29/tuple-in-c-4-0/。