我在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))
答案 0 :(得分:7)
如果您知道T
是AObject
,为什么不将[{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?