How do I raise an event via reflection in .NET/C#?

Here’s a demo using generics (error checks omitted): using System; using System.Reflection; static class Program { private class Sub { public event EventHandler<EventArgs> SomethingHappening; } internal static void Raise<TEventArgs>(this object source, string eventName, TEventArgs eventArgs) where TEventArgs : EventArgs { var eventDelegate = (MulticastDelegate)source.GetType().GetField(eventName, BindingFlags.Instance | BindingFlags.NonPublic).GetValue(source); if (eventDelegate != null) { foreach (var handler … Read more