在C#中,当我编写具有lambda参数的lambda时,我似乎得到了一个错误。然而,当我使用一个函数,而不是内部lambda时,一切都很好。
是我的错吗?
代码:
class Program
{
static void Main(string[] args)
{
// Compiles fine
Func<Func<int>, double> ff1 = funcf2 => 5.0;
// Generates a compilation error:
// Error: 'Func<Func<int>, double>' does not take 0 arguments
Func<Func<int>, double> ff2 = (() => 1) => 5.0;
}
public static int funcf2() => 1;
}发布于 2019-03-11 03:11:16
答案是由O.R.Mapper发布的:
而不是编写不编译的Func<Func<int>, double> ff2 = (() => 1) => 5.0;。我们可以写如下:
double x = ((Func<Func<int>, double>)(y => 5.0))(() => 1)谢谢你O.R.Mapper。
发布于 2019-03-11 09:23:52
这是一个错误的身份。
当您编写此代码时:
static void Main(string[] args)
{
Func<Func<int>, double> ff1 = funcf2 => 5.0;
}
public static int funcf2() => 1;假设lambda中的funcf2指的是static int funcf2()。事实并非如此。这是一个全新的变量。
试着写成这样:
static void Main(string[] args)
{
Func<Func<int>, double> ff1 = funcf2 => 5.0;
}
public static int funcf2_WOW_IT_HAS_A_NEW_NAME() => 1;这仍然编译并运行良好。
问题是,我们编写Func<Func<int>, double> ff1 = funcf2 => 5.0;时,funcf2只是一个变量,在您调用lambda时,它将在将来表示Func<int>。
编写Func<Func<int>, double> ff2 = (() => 1) => 5.0;只是一种非法的语法。这就是为什么它不能工作。
https://stackoverflow.com/questions/55015249
复制相似问题