如何防止空行位于单行 if 语句之间?

Posted

技术标签:

【中文标题】如何防止空行位于单行 if 语句之间?【英文标题】:How to prevent empty lines being places between single-line if statements? 【发布时间】:2018-12-04 00:50:59 【问题描述】:

在 Rider(对于那些不知道的人来说,基本上是一个独立的 ReSharper)中,我不明白为什么自动代码格式化会在我的 if 语句之间放置一个空行。

格式化前:

string output = "";

if (i % 3 == 0)  output += "Fizz"; 
if (i % 5 == 0)  output += "Buzz"; 

if (output == "")  Console.WriteLine(i);  else  Console.WriteLine(output); 

格式化后:

string output = "";

if (i % 3 == 0)  output += "Fizz"; 

if (i % 5 == 0)  output += "Buzz"; 

if (output == "")  Console.WriteLine(i);  else  Console.WriteLine(output); 

我终其一生都无法弄清楚执行此操作的设置,但是当您将多个类似的单行 if 语句组合在一起并且 Rider/ReSharper 一直在替换它们时,这非常令人恼火。

【问题讨论】:

更正:Rider 是一个 IDE; ReSharper 是一个代码分析工具。 File -> Settings -> Editor -> Code Style -> C# -> Blank Lines) Blank Lines in Code: 'After statements with child blocks' 你有什么价值?如果将此值设置为 0,它是否按预期工作? @John 你是对的,但是 Rider 使用相同的代码分析技术,并且与 ReSharper 有很多相似之处,因为它们都是由 JetBrains 开发的。 但这并不能使 Rider 成为“独立的 ReSharper”。这只是意味着他们在 Rider IDE 中包含了他们的代码分析工具 (ReSharper)。如果它是一个独立的 ReSharper,它将能够分析代码但不允许您编辑或编译它等。 @JonathonChase 是的,效果很好。正是我需要的,谢谢。随意在下面添加一个问题答案,以便我可以将其标记为已解决。如果没有,我会自己为将来有类似/相同问题的其他人做。 【参考方案1】:

您要查找的设置可以通过以下导航找到:File -> Settings -> Editor -> Code Style -> C# -> Blank Lines

Blank Lines in Code 小节下,您正在寻找After statements with child blocks。此特定设置在您的案例中添加行的原因是包含大括号。

if (i % 3 == 0)  output += "Fizz"; 
if (i % 5 == 0)  output += "Buzz"; 

也可以写成

if (i % 3 == 0) output += "Fizz";
if (i % 5 == 0) output += "Buzz";

语句将不再被视为具有子块,因此不受影响。如果保留大括号是您想要的样式的一部分,您可以将After statements with child blocks 的值设置为0,您将获得使用单行块时所需的格式化行为。

【讨论】:

啊,我知道出了点问题。我更改了大括号设置,因为我更喜欢它的外观,但我不知道它会影响这个特定设置。谢谢。

以上是关于如何防止空行位于单行 if 语句之间?的主要内容,如果未能解决你的问题,请参考以下文章

镖。主意。如何防止格式合并成单行

if语句条件防止空列表?

防止 clang-format 将多行 if 语句折叠成一行

使用触发器防止在单行上删除

防止在 UITableView 中刷新单行

防止自定义 UINavigationBar 元素在视图之间更改