ReSharper - 强制在单行语句中加上大括号

107

我可以配置ReSharper,在单行代码块未使用花括号时,自动修复C#代码,例如:

if (blnSomeCondition)
   DoSomething();  // complain

if (blnSomeOtherCondition)
{
   DoSomethingElse(); // don't complain
}

谢谢


3
好问题,但第一种语法有什么问题吗?花括号是不必要的。 - Micah
48
一些开发者认为,将单行代码块用花括号括起来是更好的做法,因为它可以使代码更易读、更易维护。 - Ryan Berger
34
此外,我看到很多次不使用花括号导致错误。有人进行更改,看到if语句后添加了一个新行,没有意识到它不会作为条件的一部分执行。这是微妙的但确实发生过。 - Hadi Hariri
2
我对第一种格式并没有太大问题,但我可以看出,在Hadi提到的情况下,它可能会导致错误。我们团队已经决定将其作为一项编码标准加以执行,这就是我提出这个问题的原因。 - Booberry
6
我的个人喜好是不在单行的“if”语句中使用大括号,而是将“if”和下一条语句放在同一行上,例如,“if(blnSomeCondition) Do Something();”。我希望这样可以使翻译更加清晰易懂。 - Paul Ruane
显示剩余2条评论
7个回答

164
在新版的 ReSharper (2016.x) 中,已经将它移动到了“代码风格”中。 ReSharper 2016.1.1 UPD1:对于 ReSharper 2017.x ReSharper 2017.1.2 UPD2:对于 ReSharper 2018.x ReSharper 2018.1 UPD3:对于 ReSharper 2019.x ReSharper 2019.1

UPD4: 适用于 ReSharper 2020.x 在此输入图片描述


35

Ryan是正确的(请注意,他的链接指的是R# 2.0帮助)。具体操作如下:

  1. 转到ReSharper > Options > Languages > C# > Formatting Style > Braces Layout
  2. 将“if-else”语句中的“大括号布局”设置为“使用多行大括号”
  3. 保存更改后,选择要重新格式化的范围(可以是代码选择、文件、文件夹、项目、解决方案等任何内容)。
  4. 选择ReSharper > Tools > Cleanup Code。
  5. 完成。

请记住,代码清理会执行许多不仅与代码格式相关的操作(详见http://www.jetbrains.com/resharper/webhelp/Code_Cleanup__Index.html),因此请明智使用该功能。


28

Gorohoroh的解决方案基本正确,但我需要选择“添加大括号”而非“多行使用大括号”,以在单行场景下强制添加大括号。并且我必须在“强制使用大括号”下的所有六个下拉菜单中设置才能捕获所有情况:

alt text

我真正希望的是能够设置ReSharper在违反规则时发出黄色警告或红色错误,但我还没有找到这样做的方法。因为你说得对,Gorohoroh,清理代码会做很多事情,我想有选项逐个查看和修复违规情况。

谢谢你的帮助!


8

针对 ReSharper 2016.2.2 版本。

您应该编辑您的配置文件以进行清理。正确的选项称为在 "if-else", "for", "foreach", "while", "do-while", "using" 中添加/删除单语句括号。此选项可以在C# => 代码样式中找到。

如果选中该选项,将会添加括号;如果取消选中,则会删除括号。

注意:现在添加不起作用(不知道为什么 - 可能是 ReSharper 版本过新)。但是,如果您取消上述选项,则现有的单语句周围的括号将不会被删除。

更新:问题已解决,请参见本帖子下的前两条评论。


2
这在2016.3.2中有些不同 - 在选项下,转到_Code Editing --> C# --> Code styles --> Braces --> In "If" statement_,然后在首选项下选择"始终强制执行"。其他选项包括"不强制执行"、"仅在主体为多行时强制执行"、"仅在语句为多行时强制执行"等。 - Chait
好的。谢谢!在这些设置之后,我描述的清理工作正常运行。 - Jordan

2
你可以按照截图上所见进行配置。

force curly brackets for a single line of code

PS:对于无法查看Imgur.com网址的人 -> https://ibb.co/b4xijT

1

如果这能帮助其他人节省时间,那就好了。在我们公司的一台机器上,尽管Sergey的帖子质量很高,但遵循他的建议还不够。

在相关设置上(VS2017,R#2019,两者均为最新版本),这些R#端的设置已经很好,但我还必须在Visual Studio选项中进行修改:

  • 在“选项”窗口中,转到文本编辑器 -> C# -> 代码样式 -> 格式化 -> 通用
  • 勾选“执行额外的代码清理以进行格式化”和“添加/删除单行控制语句的花括号

0

好的,它又被移动了。新位置在版本ReSharper 2020.01的语法样式下。

前往ReSharper > 选项 > 代码编辑 > C# > 语法样式 > 大括号

这是来自ReSharper 2020.01的屏幕截图。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接