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 つ以上またはそれ以下にすることができます。
私はこれは不可能だと考えています。ある種の可変パターンを作成する機能が必要ですが、正規表現を使用するかどうかに関係なく、それを行う方法がわかりません。
何か案は?