我已经使用这段代码很久了——它基于 Microsoft 示例,并且运行良好:
public class NotificationBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged = null!;
protected void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
我最近检查了我的代码并清除了警告,我唯一剩下的就是与此相关的代码。 PropertyChangedEventHandler 的初始设置为 null 给了我一个 CS8612('event PropertyChangedEventHandler NotificationBase.PropertyChanged' 类型中引用类型的可空性与隐式实现的成员'event PropertyChangedEventHandler?INotifyPropertyChanged.PropertyChanged' 不匹配)。
我知道在宏伟的计划中这并不重要,但是有谁知道如何在不抑制消息本身的情况下摆脱它?
您的示例早于可空引用类型。如果您查看 .NET 5 之前版本的
INotifyPropertyChanged.PropertyChanged
事件的文档,您会看到:
event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
.NET 5 及更高版本的相同文档显示:
event System.ComponentModel.PropertyChangedEventHandler? PropertyChanged;
逻辑表明,如果您要将某些内容设置为
null
,则它必须可以为空。您的事件签名与您从 .NET 5 开始实现的接口不匹配,这就是错误消息告诉您的内容。
我不是百分百确定,但如果您将 PropertyChangedEventHandler 声明为可空,您可能会摆脱警告。
public event PropertyChangedEventHandler? PropertyChanged = null!;