繁体   English   中英

C#表达式Lambda

[英]C# expression Lambda

嗨,我正在学习如何从一本书中使用Lambda。 在我将书中的一段代码复制到VS2010后,我得到了错误:

委托' System.Func<float> '不接受1个参数“

VS2010在“浮动x”之前的第3行左括号下标记了错误。 你能告诉我出了什么问题吗?

static void Main(string[] args)
{
    Func<float> TheFunction = (float x) =>
    {
        const float A = -0.0003f;
        const float B = -0.0024f;
        const float C = 0.02f;
        const float D = 0.09f;
        const float E = -0.5f;
        const float F = 0.3f;
        const float G = 3f;
        return (((((A * x + B) * x + C) * x + D) * x + E) * x + F) * x + G;
    };

    Console.Read();
}

您正在尝试编写一个接受 float输入的函数,并返回一个float输出。 这是一个Func<float, float> (为了给出一个更清晰的例子,如果你想要一个带有int参数和返回类型为float的委托,那将是一个Func<int, float> 。)

Func<float>没有参数,返回类型为float Func<TResult>的文档:

封装一个没有参数的方法,并返回由TResult参数指定的类型的值。

 public delegate TResult Func<out TResult>() 

因为Func<T>表示返回类型T值的委托。 来自MSDN

封装一个没有参数的方法,并返回由TResult参数指定的类型的值。

你想要的是一个Func<float, float> - 也就是说,一个委托接受一个float作为参数返回一个float类型的值。

Func中的最后一个参数是返回类型,其他参数是参数类型。 对于带有a,b,c作为参数的Func,a和b是参数类型,c是返回类型。

Func<int, int, double> func = (a,b) => a + b;
int aInt = 1;
int bInt = 2;
double answer = func(aInt, bInt); // answer = 3

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM