10

对于 ReSharper 6.1,对于 C# 的 switch 中缺少默认语句,没有内置检查项,但是自定义模式看起来通常很健壮。对于缺少 if 块的 else 语句之类的情况,我对它们进行了一些处理,但我不确定如何检查缺少的默认值。

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

搜索模式

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

替换模式

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

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

这里的问题如下:

  • 我们可以有任意数量的 case,它们本身就是由一个或多个语句(case + break 等)和任意数量的表达式组成的集合
  • 对于搜索模式匹配,我们应该只匹配在最后一种情况之后没有任何内容的情况(即没有默认值)
  • 我们需要搜索模式中的“中断”,以便我们可以在之后定义不存在的语句。无论如何,编译器需要这个中断。

显然,这种搜索模式只匹配包含单个 case 且没有 default的匹配项,因此相对没用。我需要一个模式来匹配具有任意数量 case 的开关,其中任意数量可能包含也可能不包含中断(最后一种情况除外),并且可以包含任意数量的语句,并且没有默认值。

谢谢你的帮助。

4

2 回答 2

1

我对此有很好的了解,我认为目前不可能(Resharper 7)

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

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

1) 所有 switch 语句

switch($expr$)
    $statement$

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

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

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

我意识到这离你想要的还有很长的路要走(没有替换!)但它是我能做到的最好的。

于 2012-08-09T00:10:35.717 回答
0

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

也许Visual StudioFind and Replace选项可以帮助您使用正则表达式选项。

于 2012-08-09T08:04:19.703 回答