启用可为空引用类型的 C# 事件 - 如何声明?

6
在C#中引入可空引用类型(NRT)之前,事件和触发方法的声明如下所示:
public event EventHandler MyEvent;

private void TriggerEvent()
{
    this.MyEvent?.Invoke(this, EventArgs.Empty);
}

现在,启用了NRTs,事件类型应该声明为EventHandler还是EventHandler?

public event EventHandler MyEvent;
// or
public event EventHandler? MyEvent;

private void TriggerEvent()
{
    this.MyEvent?.Invoke(this, EventArgs.Empty);
}

我会选择 "EventHandler?",但我在所有找到的C#文档中(至今)都没有看到带有“?”的“EventHandler”。
更新:编辑此问题,因为有人(?)将其标记为此问题的重复-这显然不是一个重复的问题。 我知道“?”的含义。 这不是这里的问题。

2
我删掉了之前的评论,因为其中包含了错误的信息。事实上,微软计划在.NET 5发布后完成对其核心库的null注释,并在 GitHub问题中跟踪其进展情况。因此,看起来只是缺乏文档,但是,你应该绝对使用EventHandler? - MindSwipe
你是否收到编译器警告或旧版本有什么问题?你可以设置#nullable disable并使用旧语法。 - Sinatr
1个回答

8

您说得对,它确实应该是EventHandler?,因为未订阅的事件(默认情况下)由一个null委托实例支持(至少在使用类似字段的事件时是这样的,详见此处)。文档并不总是适应可空引用类型签名。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接