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

时间:2012-08-08 14:33:04

标签: c# resharper switch-statement default

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

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

搜索模式

switch($expr$)
{
    case $val$:
        $statement$
        break;
    $missingDefault$
}

替换模式

switch($expr$)
{
    case $val$:
        $statement$
        break;
    default:
        break;
}

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

这里的问题如下:

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

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

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

我对此有一个很好的解决方案,我不相信它目前是可能的(Resharper 7)

说过你可以随时询问Resharper forum

1)所有开关语句

switch($expr$)
    $statement$

2)以default; break结尾的开关语句:

switch($expr$)
{
    $statement$
    default:
    break;
}

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

我意识到这是一个 long 远离你想要的东西(没有替换!),但它是我能想到的最好的。

答案 1 :(得分:0)

我认为ReSharper的搜索模式是不可能的 (请注意默认可以放在 case 语句之间。)

也许 Visual Studio 查找和替换 可以帮助您选择使用正则表达式