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