使用 => 进行初始化(这样)

本文关键字:这样 初始化 使用 | 更新日期: 2023-09-27 17:57:11

我一直在github上研究实体框架7源代码,并在TableExpressionBase中发现了以下属性初始化.cs

public override ExpressionType NodeType => ExpressionType.Extension;

我从未见过=>运算符在 C# 中的这种用法。我还查看了 C# 6.0 中的新功能,但是我还没有找到这个结构。有人可以解释一下它的目的是什么吗?

谢谢。

使用 => 进行初始化(这样)

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

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

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

具体来说,如果您有这样的属性:

public TYPE Name
{
    get
    {
        return EXPRESSION;
    }
}

然后,您现在可以像这样编写此属性:

public TYPE Name => EXPRESSION;

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

您可以使用方法执行相同的操作:

public string Name(int PARAM1, string PARAM2)
{
    return string.Format("{0}, {1}", PARAM1, PARAM2);
}

可以变成:

public string Name(int PARAM1, string PARAM2) => string.Format("{0}, {1}", PARAM1, PARAM2);

仅此而已。

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

public override ExpressionType NodeType
{
    get
    {
        return ExpressionType.Extension;
    }
}

正如你所怀疑的那样,这是一个新的 C# 6.0 功能。

属性和索引器可以具有仅 getter 和 settersgetter 属性和索引器可以具有表达式正文:

public string Name => First + " " + Last;
public Customer this[long id] => store.LookupCustomer(id);

http://blogs.msdn.com/b/csharpfaq/archive/2014/11/20/new-features-in-c-6.aspx

它只是为属性定义 getter 的较短方法。