无法按照我想要的方式制作 Resharper(或 VS 2019)格式切换语句

Unable to make Resharper (or VS 2019) formats switch statements the way I want

我正在使用 Resharper 的自动代码重新格式化功能,但我不知道如何让它(或 Visual Studio,就此而言)按照我想要的方式在 switch 语句中放置行。能否指出实现此目标所需的设置?

(仅供参考:我使用的是最新的 Resharper 和 Visual Studio 2019)

假设我从以下 C# 代码块开始:

if (TargetContext is BgaContext bga)
{
    Status = Strings.FindingBgaCircles;
    bga.FindCirclesAndUpdateScan(ResolutionMmpp, CancellationToken);
}
else if (TargetContext is GrooveContext groove)
{
    Status = Strings.FindingGrooveLine;
    groove.FindLineAndUpdateScan(ResolutionMmpp, CancellationToken);
}

Resharper 让我可以选择将它变成 "switch" 语句,所以我可以利用它。完成代码更改后,我会看到:

switch (TargetContext)
{
case BgaContext bga:
    Status = Strings.FindingBgaCircles;
    bga.FindCirclesAndUpdateScan(ResolutionMmpp, CancellationToken);

    break;
case GrooveContext groove:
    Status = Strings.FindingGrooveLine;
    groove.FindLineAndUpdateScan(ResolutionMmpp, CancellationToken);

    break;
}

但我不想要 "break" 之前的额外行,我 do 想要它之后的一行。换句话说,我想让 Resharper 让它看起来像这样:

switch (TargetContext)
{
case BgaContext bga:
    Status = Strings.FindingBgaCircles;
    bga.FindCirclesAndUpdateScan(ResolutionMmpp, CancellationToken);
    break;

case GrooveContext groove:
    Status = Strings.FindingGrooveLine;
    groove.FindLineAndUpdateScan(ResolutionMmpp, CancellationToken);
    break;
}

我已经尝试逐一检查每个 Resharper C# 格式设置,但找不到影响它的设置。我在设置中搜索了 "switch"、"case" 和 "break" 等词,但其中 none 似乎影响了线条的排列方式。我为 Visual Studio 做了同样的事情,仍然没有快乐。

我确定这一定就在我面前,我只是想念它。有什么设置可以满足我的需求吗?

要了解影响代码的格式设置,select 一小段代码,请按 Alt-Enter 和 select Format selection > Configure。例如,要学习影响两行代码之间空行的设置,select 一段代码从第一行代码的最后一个字符开始到第二行代码的第一个字符结束。

此外,从 ReSharper 2018.3 开始,您还可以要求 ReSharper 自动检测格式设置。 Select这段代码,按Alt-Enter和selectFormat selection > Detect formatting settings

在 ReSharper 2019.1 中,您需要设置以下设置以获得所需的格式:

  • Blank lines > Blank Lines in Code > Before statements with control transfer = 0
  • Blank lines > Blank Lines in Code > Before "case" in switch statement = 1