0

我有下一个情况

通用类:

public class A {
...
}

and two clases:

public class B: A {
...
}

public class C: A {
...
}

在代码的某些部分中,我想做类似的事情(之前填写了列表):

foreach (A item in list) {
   listB.add((B) item);
}

有可能做到吗?我只想将泛型项目列表绑定到类列表扩展泛型类。

谢谢

4

2 回答 2

9

您无法做您想做的事情,因为您将无法将类型的项目添加C到您的B项目列表中

但是你可以

foreach(B item in list.OfType<B>())
       listB.add(item);
于 2013-07-04T08:46:10.773 回答
1

解决方案是为 B 创建一个构造函数,该构造函数接受 A 的实例并从中构造 B,或者类似地在 B 上创建一个静态方法,您可以提供 A 的实例,它将返回从构造的 B 的实例A 的实例。两者都不是理想的。

你不能做你想做的事情的原因是因为 B 是 A 的子类。因此 B 将具有 A 的所有必需属性和方法,并且可以将其视为 A 的实例。但是 A 确实不具有 B 的所有必需属性和方法,因此不能将其视为 B 类型的对象。

但是,正如其中一条评论所提到的,如果您尝试转换为 B 类型的项目实际上是 B 类型,则您的代码将起作用。

于 2013-07-04T08:44:24.103 回答