.NET 7中PropertyChangedEventHandler引发CS8612与CS8618错误的解决咨询
修复.NET 7中PropertyChangedEventHandler的CS8612和CS8618错误
这两个错误都是因为.NET 7默认启用了nullable引用类型检查,你的代码不符合新的空安全规则导致的,具体修复方案如下:
错误原因说明
- CS8612:
INotifyPropertyChanged接口的PropertyChanged事件在nullable上下文里被定义为可空类型(PropertyChangedEventHandler?),但你原来的声明是非空的PropertyChangedEventHandler,导致隐式实现的成员类型不匹配。 - CS8618:事件字段默认初始值为
null,你声明为非空引用类型后,编译器要求构造函数必须给它赋非空值,否则报错。
修复方案
方案1:将事件声明为可空类型(推荐)
直接匹配接口的可空声明,同时允许事件初始为null(这符合事件的使用逻辑,因为事件可以没有订阅者):
public event PropertyChangedEventHandler? PropertyChanged;
这样两个错误会直接消失,也是最贴合.NET nullable规则的写法。
方案2:初始化空委托(保持非空声明)
如果你希望事件永远不为null(避免触发事件时的null检查),可以给事件初始化一个空委托:
public event PropertyChangedEventHandler PropertyChanged = delegate { };
这样既满足了构造函数退出时非空的要求(解决CS8618),同时非空的事件成员可以兼容接口的可空声明(解决CS8612)。
内容的提问来源于stack exchange,提问作者user16265953
相关产品推荐
相关产品推荐

