How do I use reflection to call a generic method?

You need to use reflection to get the method to start with, then “construct” it by supplying type arguments with MakeGenericMethod:

MethodInfo method = typeof(Sample).GetMethod(nameof(Sample.GenericMethod));
MethodInfo generic = method.MakeGenericMethod(myType);
generic.Invoke(this, null);

For a static method, pass null as the first argument to Invoke. That’s nothing to do with generic methods – it’s just normal reflection.

As noted, a lot of this is simpler as of C# 4 using dynamic – if you can use type inference, of course. It doesn’t help in cases where type inference isn’t available, such as the exact example in the question.

Leave a Comment