通知处理程序中的刺激性警告

问题描述 投票:0回答:2

我已经使用这段代码很久了——它基于 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' 不匹配)。

我知道在宏伟的计划中这并不重要,但是有谁知道如何在不抑制消息本身的情况下摆脱它?

c# compiler-warnings
2个回答
2
投票

您的示例早于可空引用类型。如果您查看 .NET 5 之前版本的

INotifyPropertyChanged.PropertyChanged
事件的文档,您会看到:

event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;

.NET 5 及更高版本的相同文档显示:

event System.ComponentModel.PropertyChangedEventHandler? PropertyChanged;

逻辑表明,如果您要将某些内容设置为

null
,则它必须可以为空。您的事件签名与您从 .NET 5 开始实现的接口不匹配,这就是错误消息告诉您的内容。


0
投票

我不是百分百确定,但如果您将 PropertyChangedEventHandler 声明为可空,您可能会摆脱警告。

public event PropertyChangedEventHandler? PropertyChanged = null!;
© www.soinside.com 2019 - 2024. All rights reserved.