我在c#中有一个通用的方法:
public IList<T> getList<T>();
当我把它称为下面的方式时?
...
Type T1=metadata.ModelType;
getList<T1>();
...
编译时遇到错误。
我怎么能这样做? 我真的需要将类型作为变量传递给泛型方法!
答案 0 :(得分:3)
泛型参数是类型参数:
getList<string>(); // Return a list of strings
getList<int>(); // Return a list of integers
getList<MyClass>(); // Return a list of MyClass
您不是使用类型来调用它,而是使用对象。
答案 1 :(得分:2)
正如Oded所指出的,你不能按照你尝试的方式做到这一点,因为<T>
不接受类型。但是,您可以使用反射实现您想要的效果:
Type T1=metadata.ModelType;
MethodInfo method = GetType().GetMethod("getList");
MethodInfo genericMethod = method.MakeGenericMethod(new Type[] { T1 });
genericMethod.Invoke(this, null);
如果getList
是静态方法,或者在其他类中,则需要将GetType()
替换为typeof(...)
,并将...作为类的名称。
答案 2 :(得分:0)
您不能:在您的示例中,T1是System.Type类的实例,而不是IList之类的实际类型,例如