如何转换泛型类型以适合另一个泛型方法

时间:2012-08-24 17:06:19

标签: c# generics

我在A类中有一个方法

public IList<T> MyMethod<T>() where T:AObject

我想在另一个泛型类B中调用此方法。这个T没有任何约束。

public mehtodInClassB(){
    if (typeof(AObject)==typeof(T))
    {
      //Compile error here, how can I cast the T to a AObject Type
      //Get the MyMethod data
        A a = new A();
        a.MyMethod<T>();
    }
}

C类继承自AObject类。

B<C> b = new B<C>();
b.mehtodInClassB() 

有什么想法吗?

提醒后......更新:

是。我真正想做的是

typeof(AObject).IsAssignableFrom(typeof(T))

不是

typeof(AObject)==typeof(T))

2 个答案:

答案 0 :(得分:7)

如果您知道TAObject,为什么不将[{1}}作为AObject的类型参数提供:

MyMethod

如果提供if (typeof(AObject).IsAssignableFrom(typeof(T))) { //Compile error here, how can I cast the T to a AObject Type //Get the MyMethod data d.MyMethod<AObject>(); } 作为类型参数不是一个选项,则必须在调用方法中对AObject添加相同的约束:

T

答案 1 :(得分:1)

除非对contains方法设置相同的约束,否则不能这样做。在编译时检查泛型,因此您无法做出类似的运行时决定。

或者,你可以使用反射来调用方法,它只需要更多的代码。

有关如何执行此操作的详细信息,请参阅此SO问题:How do I use reflection to call a generic method?