我想使用ReSharper 7.1搜索/替换模式在整个项目中重新考虑各种代码块。
代码块类似于以下简化示例:
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;
});
'使用'是一种扩展方法
如果所有代码块都设置了相同数量的属性,这很容易。以下搜索和替换模式将完成这项工作:
SEARCH
$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,是否有可能使用一种模式捕获和替换两个代码块?后者有一个额外的属性设置,但可以轻松多于一个或更少。
我认为这是不可能的。它需要能够创建某种变量模式,我无法看到这样做的方法,无论是使用正则表达式还是其他方式。
有什么想法吗?