7

我在 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))
4

2 回答 2

7

如果您知道这T是一个AObject,为什么不直接提供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在调用方法中设置相同的约束:

void Caller<T>() where T: AObject
{
    // ...

    d.MyMethod<T>();

    // ...
}
于 2012-08-24T17:11:00.707 回答
1

你不能这样做,除非你对包含方法施加相同的约束。泛型是在编译时检查的,所以你不能做出这样的运行时决定。

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

有关如何执行此操作的更多信息,请参阅此 SO 问题:如何使用反射调用泛型方法?

于 2012-08-24T17:09:11.700 回答