3

ReSharper 7.1 Search / Replace with pattern を使用して、プロジェクト全体でさまざまなコード ブロックをリファクタリングしたいと考えています。

コード ブロックは、次の単純化された例に似ています。

someControl.StatusProgressBar.IsIndeterminate = false;
someControl.StatusProgressBar.Visibility = Visibility.Visible;
someControl.StatusProgressBar.Minimum = 0;
someControl.StatusProgressBar.Maximum = 100;
someControl.StatusProgressBar.Value = percentage;

そして、私はそれらを次のように変更したいと思います:

someControl.StatusProgressBar.Use(p =>
{
  p.IsIndeterminate = false;
  p.Visibility = Visibility.Visible;
  p.Minimum = 0;
  p.Maximum = 100;
  p.Value = percentage;
});

「使用」は拡張メソッドです

コードのすべてのブロックが同じ数のプロパティを設定している場合、これは簡単です。次の検索と置換のパターンが機能します。

探す

$someControl$.$SomeProperty$.$SubProperty1$ = $val1$;
$someControl$.$SomeProperty$.$SubProperty2$ = $val2$;
$someControl$.$SomeProperty$.$SubProperty3$ = $val3$;
$someControl$.$SomeProperty$.$SubProperty4$ = $val4$;
$someControl$.$SomeProperty$.$SubProperty5$ = $val5$;

交換

$someControl$.$SomeProperty$.Use(p=>
{
    p.$SubProperty1$ = $val1$;
    p.$SubProperty2$ = $val2$;
    p.$SubProperty3$ = $val3$;
    p.$SubProperty4$ = $val4$;
    p.$SubProperty5$ = $val5$;
});


ただし、次のようなコード ブロックもある場合:

someControl.StatusProgressBar.IsIndeterminate = false;
someControl.StatusProgressBar.Visibility = Visibility.Visible;
someControl.StatusProgressBar.Minimum = 0;
someControl.StatusProgressBar.Maximum = 100;
someControl.StatusProgressBar.Value = percentage;
someControl.StatusProgressBar.Orientation = Vertical;

ReSharper を使用して、両方のコード ブロックをキャプチャして 1 つのパターンに置き換えることは可能ですか? 後者には 1 つの余分なプロパティ設定がありますが、簡単に 1 つ以上またはそれ以下にすることができます。

私はこれは不可能だと考えています。ある種の可変パターンを作成する機能が必要ですが、正規表現を使用するかどうかに関係なく、それを行う方法がわかりません。

何か案は?

4

0 に答える 0