【问题标题】:Changing a property to expression-bodied based on ReSharper leads to error?基于 ReSharper 将属性更改为表达式主体会导致错误?
【发布时间】:2026-02-15 11:40:01
【问题描述】:

我的一个属性如下所示:

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

但 ReSharper 建议我将其更改为:

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

如果我这样重构,那么编译会抛出错误 属性中不能有表达式体吗?

【问题讨论】:

标签: c# properties resharper expression-body


【解决方案1】:

在 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;
}

【讨论】:

    【解决方案2】:

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

    Resharper > 选项 > 代码编辑 > C# > 代码样式

    并更改以下属性:

    代码正文 > 从Expression bodyAccessors with block body 的属性、索引器和事件

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

    【讨论】:

      最近更新 更多