事件实例字段成员是否可以为空(假设它没有被强制设置为空)?

Can an event instance field member be null (assuming it is not forcefully set to null)?

假设我将此作为 class:

的成员
public event EventHandler<MyObject> SomeEventThing;

为了避免空引用警告,我必须写:

public event EventHandler<MyObject>? SomeEventThing;

这是否意味着事件字段可能为空,而我一直在玩火?或者这是一个分析器错误?

是的,类似字段的事件绝对可以为空 - 如果事件没有订阅者,则为空。编译器是正确的。生成的事件代码由委托类型的字段支持,该字段的默认值仍然像其他引用类型字段一样为null。

请注意,使用空条件 ?. 运算符,可以很容易地有条件地调用事件处理程序:

SomeEventThing?.Invoke(this, new EventArgs<MyObject>());