[英]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.