如何在 C# 中获取显式事件的调用列表

How to get invocation list of an explicit event in C#

我可以使用以下内容定义一个事件:

public event msg_callback event_PingMessage; 

并获取具有以下内容的事件的调用列表:

MulticastDelegate event_delegate = (MulticastDelegate)this.GetType().GetField(event_name,
                                BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.GetField).GetValue(this);

foreach (var handler in event_delegate.GetInvocationList())
{
    // use handler() here 
}

但是,如果我将 event_PingMessage 定义为显式事件,例如:

    private msg_callback explicitEvent;
    public event msg_callback event_PingMessage
    {
        add
        {
            explicitEvent += value;
            int i = 0; 

        }
        remove
        {
            explicitEvent -= value;
        }
    }

MulticastDelegate event_delegate = ... 行抛出异常:

Object reference not set to an instance of an object.

我如何 .GetInvocationList() 我的露骨事件?

您可以直接使用 explicitEvent.GetInvocationList()explicitEvent 相当于您对 field-like 事件的 GetField(...) 调用返回的字段。