Reputation: 19423
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
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
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
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