基于ReSharper将a属性改成expression-bodied会报错?

Changing a property to expression-bodied based on ReSharper leads to error?

我的一个属性如下所示:

public string Name
{
 get{ return _name; }
 set { _name = value; }
}

但 ReSharper 建议我将其更改为:

public string Name
{
 get => _name;
 set => _name = value;
}

如果我这样重构然后编译会抛出错误 属性 中不能有表达式正文吗?

在 C# 6 之前,您不能在属性中使用表达式主体,必须这样写。

public string FullName
{
    get { return string.Format("{0} {1}", FirstName, LastName); }
}

在 C# 6 中,您可以创建只读表达式主体。

public string FullName => $"{FirstName} {LastName}";

在 c# 7 中,您获得了成员的表达式主体,就像您展示的那样。

public string Name
{
    get => _name;
    set => _name = value;
}

如果您不希望 ReSharper 适应此行为,您可以更改它:

Resharper > Options > Code Editing > C# > Code Style

并更改以下内容属性:

Code body > Properties, indexers and events from Expression body to Accessors with block body

如果您只想禁用建议,请更改上述 属性 的通知状态。