You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# WPF中PropertyChanged语句里的‘?’运算符是什么含义?

关于C#中事件声明里?运算符的解释

你看到的?是可空引用类型的语法,这是C# 8.0及之后版本引入的特性,用来明确标记某个引用类型的变量(包括事件,因为事件本质是委托实例,委托属于引用类型)可以持有null值。

  • 事件PropertyChanged的类型是PropertyChangedEventHandler,这是一个委托类型。在C# 8.0之前,所有引用类型默认都能为null,但编译器不会主动提醒你做空值检查,很容易引发NullReferenceException。
  • 加上?之后,相当于显式告诉编译器和其他开发者:这个事件可能没有被订阅,也就是它的实例可能是null,触发事件前必须做空值判断。

比如触发该事件的标准写法就体现了它的作用:

protected virtual void OnPropertyChanged(string propertyName)
{
    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}

这里的?.是空条件运算符,和事件声明里的?配套使用——因为我们明确了PropertyChanged可能为null,所以调用Invoke前会自动检查空值,避免抛出异常。

简单总结:这个?就是明确标记该事件(委托实例)允许为null,和你理解的“像原始数据类型一样为null”逻辑一致,本质是给引用类型加上可空标注,让代码的空值意图更清晰,还能借助编译器静态分析提前规避潜在的空引用问题。

内容的提问来源于stack exchange,提问作者HandmadeWeakness

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 15:12:03