我正在编写一些Resarper Custom Patterns来警告我们一些需要注意的代码构造。其中一个是用lambda变量OnPropertyChanged(()=> propertyname)替换OnpropertyChanged(“String”)
我定义的搜索模式是:
public $type$ $property$
{
get { return $backingfield$; }
set
{
if($backingfield$ != value) {
$backingfield$ = value;
OnPropertyChanged($String$);
}
}
}
此模式正在替换为:
public $type$ $property$
{
get { return $backingfield$; }
set
{
if($backingfield$ != value) {
$backingfield$ = value;
OnPropertyChanged(() => $property$);
}
}
}
问题: 应用此选项时,Resharper会抛弃属性上定义的属性。 这个片段:
[MyAttribute]
public int Test
{
get { return _Test; }
set
{
if (_Test != value)
{
_Test = value;
OnPropertyChanged("Test");
}
}
}
替换为
public int Test
{
get { return _Test; }
set
{
if (_Test != value)
{
_Test = value;
OnPropertyChanged(() => Test);
}
}
}
如何保留属性??
更新: 将从System.Attribute派生的类型占位符添加到搜索和替换模式部分修复它。
[$Attributes$]
...
剩余问题是属性占位符只匹配一个属性,它在多个属性上失败。
答案 0 :(得分:2)
如果您无法获得其他解决方案,则有解决方法 您使用搜索模式(不使用替换模式)来显示警告。我认为这已经有效了 然后创建一个 Surround Template ,将字符串替换为()=> PropName 。见图片:
然后,您将通过搜索模式发出警告,并通过环绕模板进行替换 用法是:如果看到警告,请选择字符串,按Ctrl + E,Ctrl + U并选择模板 String to func returns property 。
当然,字符串选择很烦人。但这是我迄今为止发现的最好的。
答案 1 :(得分:0)
对于这样的任务,我使用了正则表达式。 VS支持用正则表达式替换,但有时它们挂起或只是工作很慢。但是在大多数情况下他们都会工作。
这对你有帮助吗?
更新。您不需要在替换组中拥有所有属性,正如brgerner建议的那样,您只需要转换一个字符串。例如,搜索正则表达式将为OnPropertyChanged\("{:w*}"\);
,替换字符串将为OnPropertyChanged(() => \1);
不确定是否可以在Resharper替换模式中执行此操作。