我有下一个情况
通用类:
public class A {
...
}
and two clases:
public class B: A {
...
}
public class C: A {
...
}
在代码的某些部分,我想做一些事情(先前已填充列表):
foreach (A item in list) {
listB.add((B) item);
}
有可能吗?我只想将泛型listtems列表绑定到扩展泛型类的clases列表。
由于
答案 0 :(得分:9)
您无法执行您要执行的操作,因为您无法将C
类型的项目添加到B
项目列表中
但是你可以
foreach(B item in list.OfType<B>())
listB.add(item);
答案 1 :(得分:1)
这个解决方案要么是为B创建一个构造函数,它接受A的实例并从中构造B,或者类似于B上的静态方法,你可以提供A的实例,它将返回一个B的实例从A的实例构建。两者都不理想。
你不能做你正在尝试的事情的原因是因为B是A的子类。因此B将具有A的所有必需属性和方法,并且可以被视为它是A的实例。但是A没有B的所有必需属性和方法,因此它不能被视为类型B的对象。
然而,如其中一条评论中所述,如果您尝试将其作为类型B投射的项目实际上是B类,那么您的代码将起作用。