我有一个大致像这样的设置:
public class A { ... }
public class A<T> : A { ... }
public class B<T> : A<T> { ... }
public class C : B<SomeType> { ... }
我正在对a类型的列表进行迭代,我想检查是否有东西是B类型的,如果是,将其转换为…B…我可以看到它已经提出了一个问题,我如何获得类型。但如果我不能这样做,我还有什么其他选择吗?
编辑:澄清一下,B包含一个我想使用的方法,而a不包含,因为它根本不需要它……我想检查列表中哪些对象是B类型的这样我就可以对它们运行这个方法
编辑2:我之前忘了提到中间的A了…很抱歉造成混乱
我想检查列表中哪些对象是B类型
然后在类型层次结构中引入类型B。现在你没有B
,你有B<SomeType>
,这是一种不同的类型。所以
public class A { ... }
public abstract class B : A { ... }
public class B<T> : B { ... }
public class C : B<SomeType> { ... }
或者在接口上声明你想要的方法
public class A { ... }
public class A<T> : A { ... }
public interface IB
public class B<T> : A<T>, IB { ... }
public class C : B<SomeType> { ... }
那么对于任意A,您可以检查它是否为is IB
。这可能是最自然的解决方案,因为。net没有多重继承。