v00*_*d00 13 c# resharper inotifypropertychanged
是否可以编写代码模板或代码片段,它将执行以下操作:
我有一个声明如下的属性:
public string String1 {get;set;}
Run Code Online (Sandbox Code Playgroud)
我希望reshaprer自动生成以下内容:
private string _string1;
public string String1
{
get
{
return _string1;
}
set
{
if (_string1 != value)
{
_string1 = value;
RaisePropertyChanged(() => String1);
}
}
}
Run Code Online (Sandbox Code Playgroud)
刚刚阅读了http://koder.wordpress.com/2010/03/25/resharper-inotifypropertychanged/文章,并创建了新的实时模板,可以为我想要的新属性插入代码.
是否可以以这种方式设置此模板,它可以出现在Alt + Enter菜单中,就像光标在属性声明上的建议一样
喜欢:
{Access modifiers} **{Type} {Name}** {Possible get;set; statements}
Run Code Online (Sandbox Code Playgroud)
这是我提出的实时模板,我指定'npp'来启动它.我不认为你可以用Ctrl-Shift-R替换它,但是你可以删除旧的属性声明行并输入'npp'来调用模板.
private $TYPE$ $NAME1$;
public $TYPE$ $NAME2$
{
get
{
return $NAME1$;
}
set
{
if ($NAME1$ == value) return;
$NAME1$ = value;
RaisePropertyChanged(() => $NAME1$);
}
}
Run Code Online (Sandbox Code Playgroud)
如果您希望将其作为代码检查和快速修复,则可以创建结构替换模式.转到ReSharper>选项>代码检查>自定义模式,单击添加模式,然后输入以下内容:
搜索模式:
public $type$ $name$ {get;set;}
Run Code Online (Sandbox Code Playgroud)
其中$ type $是System.Object或派生类型的类型占位符,$ name $是标识符占位符.
替换模式:
private string _$name$;
public string $name$
{
get
{
return _$name$;
}
set
{
if (_$name$ != value)
{
_$name$ = value;
RaisePropertyChanged(() => $name$);
}
}
}
Run Code Online (Sandbox Code Playgroud)
将Pattern Severity设置为特定的严重性级别,这会影响ReSharper在文本编辑器中突出显示匹配的方式.(可选)输入两种模式的描述,以便搜索模式描述关注问题(即"此常规属性是可疑的")并替换模式描述侧重于解决问题(即"替换为INotifyPropertyChanged实现")单击添加,您应该完成.
现在这种方法存在两个问题:
我创建了一个略有不同的自定义模板(ReSharper>选项>代码检查>自定义模式)
搜索模式:
public $Type$ $Pname$
{
get { return $FName$; }
set { $FName$ = value; }
}
Run Code Online (Sandbox Code Playgroud)
替换模式:
public $Type$ $Pname$
{
get { return $FName$; }
set { $FName$ = value; NotifyOnPropertyChanged(() => $Pname$); }
}
Run Code Online (Sandbox Code Playgroud)
对于已创建的自动属性,我的工作流程如下:
这不是最好的解决方案,但它对我有用.
另一种可能是两个参数使用宏来小写私有变量的第一个字母:
public $PropertyType$ $PropertyName$
{
get { return _$variableName$; }
set
{
if (_$variableName$ != value)
{
_$variableName$ = value;
RaisePropertyChanged(() => $PropertyName$);
}
}
}
Run Code Online (Sandbox Code Playgroud)
以下是最终R#Tempate的屏幕截图:

| 归档时间: |
|
| 查看次数: |
4558 次 |
| 最近记录: |