编辑 Resharper 的 INotifyPropertyChanged
Editing Resharper's INotifyPropertyChanged
当我有一个 class 并声明实现 INotifyPropertyChanged
接口时,ReSharper 将自动生成此实现:
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged(string propertyName)
{
var handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
我总是编辑成这样:
public event PropertyChangedEventHandler PropertyChanged = delegate { };
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
我能以某种方式编辑自动生成的代码吗? Resharper 的文档对此我不太清楚。
不,您不能编辑自动生成的代码,因为它在生成时需要处理多种可能性 - 例如C#6使用了?.
运算符,当事件已经存在且已经初始化时也需要处理
如果你确实想使用没有局部变量和空检查的shorthand版本,那么你可以先创建事件,并在生成之前用= () => { };
初始化它OnPropertyChanged
方法。但是,为了线程安全,最好保留本地 var + null 检查。
当我有一个 class 并声明实现 INotifyPropertyChanged
接口时,ReSharper 将自动生成此实现:
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged(string propertyName)
{
var handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
我总是编辑成这样:
public event PropertyChangedEventHandler PropertyChanged = delegate { };
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
我能以某种方式编辑自动生成的代码吗? Resharper 的文档对此我不太清楚。
不,您不能编辑自动生成的代码,因为它在生成时需要处理多种可能性 - 例如C#6使用了?.
运算符,当事件已经存在且已经初始化时也需要处理
如果你确实想使用没有局部变量和空检查的shorthand版本,那么你可以先创建事件,并在生成之前用= () => { };
初始化它OnPropertyChanged
方法。但是,为了线程安全,最好保留本地 var + null 检查。