使用类型的字符串调用模板函数

时间:2016-07-06 08:51:36

标签: c# templates

我需要调用模板函数,例如:

void myFunc<T>();

我有模板类型作为字符串,我想使用我有的类型作为字符串调用该函数。 例如,如果我想为Exception类型调用它,而不是调用:

myFunc<Exception>()

我需要这样做:

string type = "Exception";
myFunc<type>();

(我需要解析json字符串中的对象,并且我将对象的类型作为字符串获取)

有没有办法做这样的事情。

由于

1 个答案:

答案 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