我有下一个情况
通用类:
public class A {
...
}
and two clases:
public class B: A {
...
}
public class C: A {
...
}
在代码的某些部分中,我想做类似的事情(之前填写了列表):
foreach (A item in list) {
listB.add((B) item);
}
有可能做到吗?我只想将泛型项目列表绑定到类列表扩展泛型类。
谢谢
您无法做您想做的事情,因为您将无法将类型的项目添加C
到您的B
项目列表中
但是你可以
foreach(B item in list.OfType<B>())
listB.add(item);
解决方案是为 B 创建一个构造函数,该构造函数接受 A 的实例并从中构造 B,或者类似地在 B 上创建一个静态方法,您可以提供 A 的实例,它将返回从构造的 B 的实例A 的实例。两者都不是理想的。
你不能做你想做的事情的原因是因为 B 是 A 的子类。因此 B 将具有 A 的所有必需属性和方法,并且可以将其视为 A 的实例。但是 A 确实不具有 B 的所有必需属性和方法,因此不能将其视为 B 类型的对象。
但是,正如其中一条评论所提到的,如果您尝试转换为 B 类型的项目实际上是 B 类型,则您的代码将起作用。