【发布时间】:2012-03-13 16:03:17
【问题描述】:
我正在编写一些 Resarper 自定义模式来警告我们一些需要注意的代码结构。其中之一是将 OnpropertyChanged("String") 替换为 lambda 变体 OnPropertyChanged(() => propertyname)
我定义的搜索模式是:
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 会丢弃属性上定义的属性。 这个sn-p:
[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$]
...
剩下的问题是属性占位符只匹配一个属性,它在多个属性上失败。
【问题讨论】:
-
您真的需要搜索整个属性吗?也许您可以搜索
OnPropertyChanged($String$);并将其替换为OnPropertyChanged(() => $String$);。 -
执行此操作时,OnpropertyChanges("test") 将替换为 OnPropertyChanged(() => "test")。测试占位符被定义为字符串类型的表达式。
-
你是对的。这是我的错。
标签: c# visual-studio-2010 resharper resharper-6.0