?. 空值的条件访问操作符
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("ErrorTimes"));
与以下代码含义相仿
// 以下代码不是工业级的做法,原因是“检查空值”,和“进行调用”是两个动作。不是线程安全的。
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs("ErrorTimes"));
// ?.操作符号,实现了相似代码(线程安全版本):
var localCopy = PropertyChanged;
if (localCopy != null)
{
localCopy(this, new PropertyChangedEventArgs("ErrorTimes"));
}