10

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 個のステートメントです。

ここでの問題は次のとおりです。

  • ケースはいくつでも持つことができ、それ自体が 1 つ以上のステートメント (case + break など) と任意の数の式で構成されるコレクションです。
  • 検索パターン マッチングでは、最後のケースの後に何もない (つまり、デフォルトがない) 出現に対してのみマッチングする必要があります。
  • その後、ステートメントが存在しないことを定義できるように、検索パターンに「ブレーク」が必要です。とにかく、このブレークはコンパイラによって必要とされます。

明らかに、この検索パターンは単一の caseを含み、 default を含まないオカレンスに対してのみ一致するため、比較的役に立ちません。任意の数の caseを持つ switch と一致するパターンが必要です。そのうちの任意の数にはブレークが含まれる場合と含まれない場合があり (最後の case を除く)、任意の数のステートメントを含めることができ、デフォルトはありません。

ご協力いただきありがとうございます。

4

2 に答える 2

1

私はこれに良い亀裂がありました、そして私はそれが現在可能であるとは思わない(Resharper 7)

Resharperフォーラムでいつでも質問できると言っています

私が提供できる唯一の有用なものは、見つけるためのパターンです

1)すべてのswitchステートメント

switch($expr$)
    $statement$

2)で終わるswitchステートメントdefault; break

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

default;break;次に、これら2つのリストの違いを使用して、ステートメントが欠落しているリストを判別できます。たとえば、私のプロジェクトでは、最初の231回の発生があり、2番目の58回しか発生していません。

私はこれがあなたが望んでいたものから遠く離れていることを理解しています(置き換えはありません!)が、私が集めることができる最高のものです。

于 2012-08-09T00:10:35.717 に答える
0

ReSharperの検索パターンでは無理だと思います。(また、 defaultはcaseステートメント の間に配置できることに
注意してください。)

Visual Studioの [検索と置換] オプションを使用すると、[正規表現を使用] オプションを使用できる場合があります。

于 2012-08-09T08:04:19.703 に答える