C# - Calling a generic method

C# - Calling a generic method

First I'd like to say Happy New Year! I hope that everyone had a good time celebrating NYE 2017. Now let's move onto the fun stuff in 2018, programming! I have been seeing a lot of questions about how to call generic methods using reflection in C# so that will be the topic at focus.

Calling generic methods in C# is generally straight forward but as with anything it get can difficult. Consider a scenario where you are trying to call a generic method when the type parameter isn't known at compile time. How would you execute the method?

Sample class

public class Sample
{
    public void Example(string typeName)
    {
        Type myType = FindType(typeName);
        // This is where the example code shown below would be executed
    }

    public void GenericMethod()
    {
        // Do Stuff
    }

    public static void StaticMethod()
    {
        // Do Stuff
    }
}

Calling generic methods using reflection

Instantiate the method using MakeGenericMethod

First get the GenericMethod() by name, then instantiate the method using MakeGenericMethod. Note that if you are instantiating a static method you may need to specify the binding flags when calling GetMethod(). For example, passing BindingFlags.Static will return a static method.

MethodInfo method = typeof(Sample).GetMethod("GenericMethod");
MethodInfo generic = method.MakeGenericMethod(myType);

Invoking a generic method using reflection

Execute GenericMethod() using reflection. Note that passing "this" in this context is the equivalent of passing "new Sample()".

generic.Invoke(this, null);

Invoking a static generic method using reflection

Invoking a static generic method is similar to a non-static generic method. Just remember to pass null as the first argument when we call .Invoke().

generic.Invoke(null, null);