我如何使用Variables将类型传递给泛型方法?

时间:2010-03-18 09:35:44

标签: c# types generics

我在c#中有一个通用的方法:

public IList<T> getList<T>();

当我把它称为下面的方式时?

...
Type T1=metadata.ModelType;
getList<T1>();

...

编译时遇到错误。

我怎么能这样做? 我真的需要将类型作为变量传递给泛型方法!

3 个答案:

答案 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之类的实际类型,例如