Ian Davis
Ian Davis

Reputation: 19423

Call a static method given it's dynamic type and arguments in c#

I have a class with a static method:

public class MyClass {
    public static bool MyMethod<T>(string arg1) where T : class {
        // ...
    }
}

How can I invoke that given that I know my type for T should be MyNamespace.Data.Models.Student (which is provided via a variable), and the value for arg1 is let's say student.

Is it similar to the following? I'm not sure how to set the T type for it tho.

Type.GetType("MyClass").GetMethod("MyMethod").Invoke(null, new object[] { arg1 = "student" })

Upvotes: 3

Views: 155

Answers (3)

Selman Gen&#231;
Selman Gen&#231;

Reputation: 101681

First you should get your method and use MakeGenericMethod like this:

 var methodType =Type.GetType("MyClass").GetMethod("MyMethod", BindingFlags.Static |BindingFlags.Public);
 var argumentType = typeof (Student);
 var method = methodType.MakeGenericMethod(argumentType);
 method.Invoke(null, new object[] { "student" });

Upvotes: 3

Servy
Servy

Reputation: 203829

You're looking for the MakeGenericMethod method of MethodInfo:

Type.GetType("MyClass")
    .GetMethod("MyMethod")
    .MakeGenericMethod(typeOfGenericArgument)
    .Invoke(null, new object[] { "student" })

Upvotes: 4

Reed Copsey
Reed Copsey

Reputation: 564413

You need to specify BindingFlags.Static in GetMethod to get a static method. Once you've done that, you can make a generic method via MethodInfo.MakeGenericMethod to construct the method with the proper type.

Upvotes: 1

Related Questions