哪位大侠能给讲讲PropertyChanged?.Invoke这句是啥意思.

snfdf 2016-08-10 08:29:32
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("ErrorTimes"));
尤其是?.这个地方不理解啊,?是允许为null吗?而且去掉?运行就报错了,说要先判断是否为null.
谢谢.
...全文
2968 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Forty2 2016-08-11
  • 打赏
  • 举报
回复 1
引用 2 楼 sp1234 的回复:
写成 if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("ErrorTimes")); 更清楚一些。 不要为了一点点淫巧炫技而写代码。
?. 叫做null-conditional operator(空值的条件访问操作符),是C#6新增的语言特色。 其实,“空值的条件访问操作符”还是很受欢迎的。它让C#的表达力更强。相同的表达,没有用?.操作符,要多好几条语句。而且,?.操作符是C#语言特色,有VisualStudio2015或以上,就可以编译使用。它跟DotNet运行版本没有关系,DotNet4可以用它,DotNet2等也可以用它。

// 以下代码不是工业级的做法,因为“检查空值”,和“进行调用”是两个动作。不是线程安全的。
if (PropertyChanged != null)
       PropertyChanged(this, new PropertyChangedEventArgs("ErrorTimes"));

// ?.操作符号,实现了类似代码(线程安全版本):
var localCopy = PropertyChanged;
if (localCopy != null)
{
    localCopy(this, new PropertyChangedEventArgs("ErrorTimes"));
}
很有意思的是在我的VisualStudio2015下,如果你写上述线程安全版本。VisualStudio将建议你换成?.的方式: (IDE1005 delegate invocation can be simplified)
snfdf 2016-08-11
  • 打赏
  • 举报
回复
是,我的就是VS建议换成这种写法的,然后就看不太明白了.
秋的红果实 2016-08-10
  • 打赏
  • 举报
回复 2
等于

if(PropertyChanged!=null)
{
    PropertyChanged.Invoke(this, new PropertyChangedEventArgs("ErrorTimes"));
}
  • 打赏
  • 举报
回复 1
写成 if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("ErrorTimes")); 更清楚一些。 不要为了一点点淫巧炫技而写代码。
SoulRed 2016-08-10
  • 打赏
  • 举报
回复
对。他要求PropertyChanged 不为空,然后才能调用回调函数。

111,131

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧