使用字符串指定泛型类型参数
本文关键字:泛型类型参数 字符串 | 更新日期: 2023-09-27 18:27:14
假设我有一个方法
public void Whatever<T>() { ... }
假设我有一个字符串形式的类型
var myType = "System.String";
通常,我会调用这样的方法:
Whatever<string>();
但我希望能够以某种方式使用myType来调用它。这可能吗?我知道这不起作用,但从概念上讲:
Whatever<Type.GetType(myType)>();
您可以使用反射和MethodInfo.MakeGenericMethod进行
反映要调用的方法以获取MethodInfo
,然后使其通用并调用它。
类似的事情(注意,这是我的想法(这里没有VS),它可能还不完美,但应该让你开始):
Type type = myObject.GetType();
MethodInfo method = type.GetMethod("NameOfMethod");
MethodInfo genericMethod = method.MakeGenericMethod(typeOf(string));
genericMethod.Invoke(myObject, new object[] { "theString" } );
您可以通过Reflection创建实例(或者同时提供泛型和非泛型Whatever
类型)。当然,"反射"是缓慢的(并且只能有一个对象或基类引用)。通常,泛型类型可以只是非泛型类型的专门化。