基于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
如果您只想禁用建议,请更改上述 属性 的通知状态。
我的一个属性如下所示:
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
toAccessors with block body
如果您只想禁用建议,请更改上述 属性 的通知状态。