使用字符串指定泛型类型参数

时间:2012-03-08 14:59:55

标签: c#

假设我有一个方法

public void Whatever<T>() { ... }

假设我有一个字符串形式的类型

var myType = "System.String";

通常情况下,我会调用以下方法:

Whatever<string>();

但是我希望能够以某种方式使用myType来调用它。这可能吗? 我知道这不起作用,但从概念上说:

Whatever<Type.GetType(myType)>();

2 个答案:

答案 0 :(得分:2)

您可以使用反射和MethodInfo.MakeGenericMethod来实现此目标

反映您要调用的方法以获取MethodInfo,然后将其设为通用并Invoke

像这样的东西(注意这是我的头顶(这里没有VS),它可能不完美但是应该让你开始):

Type type = myObject.GetType();
MethodInfo method = type.GetMethod("NameOfMethod");
MethodInfo genericMethod = method.MakeGenericMethod(typeOf(string));
genericMethod.Invoke(myObject, new object[] { "theString" } );

答案 1 :(得分:0)

您可以通过Reflection创建实例(或提供泛型和非泛型Whatever类型)。当然,反射很慢(你只能有一个对象或基类引用)。通用类型通常只是非泛型类型的特化。