假设我有一个方法使用字符串
public void Whatever<T>() { ... }
假设我有一个字符串
var myType = "System.String";
通常形式的类型,我会打电话等方法指定的通用类型参数:
Whatever<string>();
但我想能够以某种方式使用myType来调用它。这可能吗? 我知道这是不行的,但概念:
Whatever<Type.GetType(myType)>();
假设我有一个方法使用字符串
public void Whatever<T>() { ... }
假设我有一个字符串
var myType = "System.String";
通常形式的类型,我会打电话等方法指定的通用类型参数:
Whatever<string>();
但我想能够以某种方式使用myType来调用它。这可能吗? 我知道这是不行的,但概念:
Whatever<Type.GetType(myType)>();
您可以创建通过反射实例(或提供通用和非通用Whatever
型)。当然,反射速度很慢(并且只能有一个对象或基类参考)。泛型类型通常可以只是非泛型类型的一个特例。
您可以使用反射和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" });
不是真的。泛型是一个编译时功能,使用类型元数据是一个运行时的事情。沿着这条道路的任何答案都可能是痛苦的。你真的需要做什么?因为也许有一个更简单的机制。 – 2012-03-08 15:02:17
你打算如何继续使用'Whatever'? – dasblinkenlight 2012-03-08 15:04:22
也许这个问题应该被编辑为“使用字符串指定泛型类型参数”,因为它可以用字符串表示泛型类型。 – Ani 2012-03-08 15:14:57