将派生类转换为基泛型类



我有一个大致像这样的设置:

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没有多重继承。

最新更新