如何防止在单行 if 语句之间放置空行?

How to prevent empty lines being places between single-line if statements?

在 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 始终取代它们时,这会非常令人恼火。

您要查找的设置可以通过以下导航找到: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 并且您将在使用单行块时获得所需的格式设置行为。