我需要调用模板函数,例如:
void myFunc<T>();
我有模板类型作为字符串,我想使用我有的类型作为字符串调用该函数。 例如,如果我想为Exception类型调用它,而不是调用:
myFunc<Exception>()
我需要这样做:
string type = "Exception";
myFunc<type>();
(我需要解析json字符串中的对象,并且我将对象的类型作为字符串获取)
有没有办法做这样的事情。
由于
答案 0 :(得分:0)
必须在编译类型中知道泛型类型,才能以经典方式调用泛型方法。
因此,如果没有反射,您需要隐式指定类型myFunc<string>()
。
但是,使用反射可以在运行时指定类型。请考虑以下示例:
class Program
{
static void Main(string[] args)
{
string xyz = "abc";
BindingFlags methodflags = BindingFlags.Static | BindingFlags.Public;
MethodInfo mi = typeof(Program).GetMethod("MyFunc", methodflags);
mi.MakeGenericMethod(xyz.GetType()).Invoke(null, null);
}
public static void MyFunc<T>()
{
Console.WriteLine(typeof(T).FullName);
}
}
MyFunc
打印System.String