假设我有一个方法
public void Whatever<T>() { ... }
假设我有一个字符串形式的类型
var myType = "System.String";
通常情况下,我会调用以下方法:
Whatever<string>();
但是我希望能够以某种方式使用myType来调用它。这可能吗? 我知道这不起作用,但从概念上说:
Whatever<Type.GetType(myType)>();
答案 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
类型)。当然,反射很慢(你只能有一个对象或基类引用)。通用类型通常只是非泛型类型的特化。