我有一个C#中的通用方法:
public IList<T> getList<T>();
当我按照以下方式进行调用时?
...
Type T1=metadata.ModelType;
getList<T1>();
编译时出现错误。
我该怎么办呢? 我真的需要将类型作为变量传递给这个通用方法!
getList<string>(); // Return a list of strings
getList<int>(); // Return a list of integers
getList<MyClass>(); // Return a list of MyClass
你没有使用类型,而是使用了一个对象。
<T>
不接受类型。但是,你可以使用反射来实现你想要的效果:Type T1=metadata.ModelType;
MethodInfo method = GetType().GetMethod("getList");
MethodInfo genericMethod = method.MakeGenericMethod(new Type[] { T1 });
genericMethod.Invoke(this, null);
getList
是一个静态方法或在另一个类中,您需要将GetType()
替换为typeof(...)
,其中...是类的名称。在您的示例中,T1是System.Type类的实例,而不是像IList一样的实际类型,因此无法使用“:”。