用=>初始化(这样)

int*_*jaz 6 c# entity-framework

我一直在寻找github上的Entity Framework 7源代码,我在TableExpressionBase.cs中发现了以下属性初始化

public override ExpressionType NodeType => ExpressionType.Extension;
Run Code Online (Sandbox Code Playgroud)

我从未=>在C#中看到过运算符的这种用法.我也看了C#6.0中的新内容,但是我没有找到这个结构.有人可以解释它的目的是什么?

谢谢.

ang*_*son 2

这是 C# 6.0 中添加的新的表达式主体成员语法。

本文对所添加的内容进行了很好的概述,请在文章下方约 3/4 处查找标题“表达式主体函数和属性”。

在 C# 6.0 中添加了许多在底层生成代码的语法。它不允许你做以前做不到的事情,但它使你必须编写的代码行数更少。

具体来说,如果您有这样的财产:

public TYPE Name
{
    get
    {
        return EXPRESSION;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你现在可以像这样编写这个属性:

public TYPE Name => EXPRESSION;
Run Code Online (Sandbox Code Playgroud)

编译后的代码将是相同的,因此您可以选择要使用的两种语法变体中的哪一种。

您可以使用方法做同样的事情:

public string Name(int PARAM1, string PARAM2)
{
    return string.Format("{0}, {1}", PARAM1, PARAM2);
}
Run Code Online (Sandbox Code Playgroud)

可以变成:

public string Name(int PARAM1, string PARAM2) => string.Format("{0}, {1}", PARAM1, PARAM2);
Run Code Online (Sandbox Code Playgroud)

这里的所有都是它的。

具体来说,您在 EF7 代码中看到的属性基本上与此相同:

public override ExpressionType NodeType
{
    get
    {
        return ExpressionType.Extension;
    }
}
Run Code Online (Sandbox Code Playgroud)