我正在按照教程进行操作,但出现错误。可以重写语句:
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
代码:
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
答案 0 :(得分:2)
如果您使用的是C#6的早期版本,则可以这样做
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
if(PropertyChanged != null)
PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
进一步阅读
?. and ?[] null-conditional Operators (C# and Visual Basic)
在执行以下操作之前测试左侧操作数的值为null 成员访问(?。)或索引(?[])操作;如果 左侧操作数的值为空。
和
空条件运算符正在短路。如果一次操作 在条件成员访问和索引操作返回的链中 null,则链的其余部分停止执行
根据Jeff的评论进行更新
您在上面给出的实现是以下应用的最重要用例之一 ?为了线程安全-您应该将事件字段保存到本地 变量,然后检查它是否为空并调用–杰夫1
他是100%正确的
理想情况下,您应该这样做
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
var changedEvent = PropertyChanged;
if(changedEvent != null)
changedEvent.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
有关此的更多信息,请参考 pinkfloydx33
提供的相关问题