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

时间:2011-07-03 14:27:06

标签: c# methods lambda return-type

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

7 个答案:

答案 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/