【发布时间】:2017-09-04 22:06:29
【问题描述】:
我有一个方法,它的主体是这样的:
public void Foo()
{
}
根据 ReSharper 的建议,我想将其转换为表达式主体以节省一些空间,结果变成:
public void Foo() => ;
无法编译。是否有不支持的具体原因?
我认为我应该为 ReSharper 开一个错误票,因为它会将代码重构为不可编译的版本。
【问题讨论】:
-
是的,这是一个更清晰的错误。如果你想节省空间,那么
public void Foo() {}(全是一行)实际上更短。 -
我无法从这里访问 C# 规范,但可以从 here 访问:对于返回 void 的方法 - 和返回任务的异步方法 - 箭头语法仍然适用,但是箭头后面的表达式必须是语句表达式(就像 lambdas 的规则一样) 所以是的,一个 R# 错误
-
也发现了这一点,C# 规范的第 7.1 节说 分类为无的表达式仅在语句表达式的上下文中有效。 所以你需要在那里。例如,您可以使用
Expression.Empty()侥幸逃脱,但就像 juharr 所说,这有点毫无意义。