首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lambda或Lambda

Lambda或Lambda
EN

Stack Overflow用户
提问于 2019-03-06 03:49:15
回答 2查看 75关注 0票数 0

在C#中,当我编写具有lambda参数的lambda时,我似乎得到了一个错误。然而,当我使用一个函数,而不是内部lambda时,一切都很好。

是我的错吗?

代码:

代码语言:javascript
复制
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;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-11 03:11:16

答案是由O.R.Mapper发布的:

而不是编写不编译的Func<Func<int>, double> ff2 = (() => 1) => 5.0;。我们可以写如下:

代码语言:javascript
复制
double x = ((Func<Func<int>, double>)(y => 5.0))(() => 1)

谢谢你O.R.Mapper。

票数 -1
EN

Stack Overflow用户

发布于 2019-03-11 09:23:52

这是一个错误的身份。

当您编写此代码时:

代码语言:javascript
复制
static void Main(string[] args)
{
    Func<Func<int>, double> ff1 = funcf2 => 5.0;
}

public static int funcf2() => 1;

假设lambda中的funcf2指的是static int funcf2()。事实并非如此。这是一个全新的变量。

试着写成这样:

代码语言:javascript
复制
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;只是一种非法的语法。这就是为什么它不能工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55015249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档