使用=>初始化(这样)

时间:2015-06-20 16:31:08

标签: c# entity-framework

我一直在查看github上的Entity Framework 7源代码,我在TableExpressionBase.cs

中找到了以下属性初始化
public override ExpressionType NodeType => ExpressionType.Extension;

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

感谢。

2 个答案:

答案 0 :(得分:2)

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

This article对所添加的内容有一个很好的概述,查找标题" Expression Bodied Functions and Properties"大约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;
    }
}

答案 1 :(得分:1)

您怀疑是新的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的简短方法。