我有以下课程:
public abstract class ParentCollection
{
public List<ParentObject> MyList { get; set; }
public ParentCollection(){}
}
ParentObject
有一个继承自它的子类ChildObject
。 ParentCollection
也有以下子类:
public class ChildCollection : ParentCollection
{
public ChildCollection() : base()
{
this.MyList = new List<ChildObject>();
}
private void Filter()
{
this.MyList = this.Objects.Where(p => p.Age > 18).ToList();
}
}
第this.MyList = new List<ChildObject>();
行正在投掷Cannot implicitly convert type error
。 Filter()
方法也引发了类型错误。
我的理解是父对象列表应允许使用子对象进行实例化,因为该对象继承自父对象。
答案 0 :(得分:2)
此处的问题是ChildObject
可能是ParentObject
的孩子,List<ChildObject>
不是List<ParentObject>
的孩子。 List<ChildObject>
是List
类型的对象,List<ParentObject>
您可以像这样更改ParentCollection
以达到您想要的效果。
abstract class ParentCollection
{
public IEnumerable<ParentObject> MyList { get; set; }
public ParentCollection() { }
}
答案 1 :(得分:1)
问题是允许通过基接口对派生类型列表进行写访问可以让你将错误类型的对象添加到列表中。
但是,如果您只需要对列表进行枚举读取访问,则可以执行以下操作:
public abstract class ParentCollection
{
public IEnumerable<ParentObject> MyList
{
get;
set;
}
public ParentCollection()
{
}
}