[?.] = 空值的条件访问操作符
- [?.] 叫做null-conditional operator(空值的条件访问操作符),是C#-6新增的语言特色。
其实,“空值的条件访问操作符”还是很受欢迎的。它让C#的表达力更强。相同的表达,没有用[?.]操作符,要多好几条语句。而且,[?.]操作符是C#语言特色,有VisualStudio2015或以上,就可以编译使用。它跟.Net运行版本没有关系,.Net-4可以用它,.Net-2等也可以用它。
// 以下代码不是工业级的做法,因为“检查空值”,和“进行调用”是两个动作。不是线程安全的。
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs("ErrorTimes"));
·可简化委托调用(IDE1005 delegate invocation can be simplified) ==>
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("ErrorTimes"));
·该[?.]操作符号,实现了类似代码(线程安全版本)。
// ?.操作符号,实现了类似代码(线程安全版本):
var localCopy = PropertyChanged;
if (localCopy != null)
{
localCopy(this, new PropertyChangedEventArgs("ErrorTimes"));
}