?无效的表达条件

时间:2018-07-28 06:04:46

标签: c#

我正在按照教程进行操作,但出现错误。可以重写语句:

PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));

代码:

public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}

1 个答案:

答案 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

提供的相关问题

Is C# 6 ?. (Elvis op) thread safe? If so, how?