检查switch语句中是否缺少缺省情况

jro*_*lla 10 c# resharper default switch-statement

对于ReSharper 6.1,在C#交换机中没有缺少默认语句的内置检查项,但是自定义模式看起来通常很健壮.我已经搞砸了一些类似于if块的其他语句,但是我不确定如何检查缺少的默认值.

这是我到目前为止所拥有的:

搜索模式

switch($expr$)
{
    case $val$:
        $statement$
        break;
    $missingDefault$
}
Run Code Online (Sandbox Code Playgroud)

替换模式

switch($expr$)
{
    case $val$:
        $statement$
        break;
    default:
        break;
}
Run Code Online (Sandbox Code Playgroud)

其中$ expr $是表达式,$ val是表达式,$ statement $是任意数量的语句,$ missingDefault $最多为0个语句.

这里的问题如下:

  • 我们可以有任意数量的案例,这些案例本身就是由一个或多个陈述(案例+中断等)和任意数量的表达式组成的集合
  • 对于搜索模式匹配,我们应该只匹配在最后一个案例之后没有任何内容的事件(即没有默认值)
  • 我们需要搜索模式中的"break",以便我们可以在此后定义不存在的语句.无论如何,编译器都需要这个中断.

显然,这种搜索模式只匹配包含单个案例且没有默认值的事件,因此相对无用.我需要一个模式来匹配具有任意数量的案例的交换机,其中任何数量的案例可能包含或不包含中断(除了最后一种情况)并且可以包含任意数量的语句,并且没有默认值.

谢谢你的帮助.

wal*_*wal 1

我已经很好地解决了这个问题,但我认为目前不可能(Resharper 7)

话虽如此,您随时可以在Resharper 论坛上提问

我能提供的唯一可能有用的就是找到的模式

1)所有switch语句

switch($expr$)
    $statement$
Run Code Online (Sandbox Code Playgroud)

2)以 结尾的 switch 语句default; break

switch($expr$)
{
    $statement$
    default:
    break;
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用这两个列表的差异来确定哪些列表缺少该default;break;语句。例如,在我的项目中,第一个出现了 231 次,第二个出现了 58 次。

我意识到这离你想要的还有很长的路要走(没有替代!),但这是我能召集的最好的。