【问题标题】: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 body 到Accessors with block body 的属性、索引器和事件
如果您只想禁用建议,请更改上述属性的通知状态。