例如,实现INotifyPropertyChanged
interface:
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
var handler = PropertyChanged;
if (handler != null)
handler.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
两件事:
答案 0 :(得分:9)
如果我使用空条件运算符,我应该将事件ProperyChanged复制到局部变量吗?
不,没有必要。实际上,引入空条件运算符的主要原因之一是使用此模式简化代码。它与将源值复制到局部变量具有相同的效果,并且本质上避免了“复制到局部变量”技术旨在解决的“检查和使用”并发陷阱。
见相关帖子:
Invoking Events, h(args) vs EventName?.Invoke()(几乎完全重复......但它确实从一个略微不同的角度接近问题)
Why should I check for null before I invoke the custom event?
Raising C# events with an extension method - is it bad?
Is there any reason to assign an event to a local variable before raising it?
答案 1 :(得分:1)
还有其他方法可以进行空检查 - 简单地将委托{}分配给您的事件,因此它永远不会为空
public event PropertyChangedEventHandler PropertyChanged = delegate{};