通过反射获取 public 静态事件的 GetInvocationList

Get GetInvocationList of a public static event via reflection

我有一个 class,其中包含 public 静态事件,我需要查明它是否附加了处理程序。我知道我可以使用 GetInvocationList() (如果事件不是静态的,那么我可以通过 GetField() 方法找到它)但问题是事件是静态的,我似乎无法通过使用反射来获取值。

public class Business
{
  public static event EventHandler MyEvent;
}

我需要从另一个 class:

获取此事件的事件处理程序
public class MyClass
{
  public void Test()
  {
    FieldInfo fieldInfo = typeof(Business).GetField("MyEvent", BindingFlags.Static | BindingFlags.Public | BindingFlags.FlattenHierarchy);
    // fieldInfo is null!!
    Delegate del = (Delegate)fieldInfo.GetValue(null);
    var list = del.GetInvocationList();
  }
}

我无法让 fieldInfo 返回值而不是 null!

因为 Business 是你自己的 class 使用反射似乎没有必要,这就是为什么我建议只做一个简单的方法来获取所需信息的原因。

例如

public class Program
{
    public static void Main()
    {
        Business.MyEvent += MyFancyEventListener; 
        var xyz = Business.MyEventsInvocationList();
        foreach (var x in xyz)
            Console.WriteLine(x);
    }
    
    private static void MyFancyEventListener(object sender, EventArgs args)
    {
        
    }
}

public class Business
{
    public static event EventHandler MyEvent;

    //add this method to your class
    public static IEnumerable<Delegate> MyEventsInvocationList() => MyEvent.GetInvocationList();
}