C# 通用列表转换

C# 通用列表转换,c#,collections,interface,C#,Collections,Interface,我有三节课 public class OSiteEquipment : IPlantItem public class OSiteSubSystem : IPlantItem public class OSiteComponent : IPlantItem 每个实现接口IPlantItem 在我的xaml中,我绑定到一个可观察的集合,如 public ObservableCollection<IPlantItem> CurrentItems 当站点结构.设备是OSiteeEqui

我有三节课

public class OSiteEquipment : IPlantItem
public class OSiteSubSystem : IPlantItem
public class OSiteComponent : IPlantItem
每个实现接口IPlantItem

在我的xaml中,我绑定到一个可观察的集合,如

public ObservableCollection<IPlantItem> CurrentItems
站点结构.设备
是OSiteeEquipment的可观察集合时,编译器说我不能从
可观察集合
转换为
可观察集合

有没有办法解决这个问题。我需要进行显式转换吗

编辑

解决了它,而不是将CurrentItems定义为ObservableCollection i

object CurrentItems

一开始我没有这么做的原因是我认为我会破坏通知绑定,但它仍然可以正常工作。

ObservableCollection
ObservableCollection
的显式转换也不起作用。如果您希望这样做,则需要将
ositeeEquipment
集合的元素复制到新的
IPlantItem
。但是,对原始集合的更改不会影响新集合,因此这不是您想要的


您已经找到了一个解决方案,但我认为如果您将
CurrentItems
的类型更改为
IEnumerable
会更好。这不应影响绑定,但这意味着您的代码更安全,更具自文档性(该属性应该是什么更为明显)。

为什么要避免显式转换?
observateCollection
不是
observateCollection
。当然,编译器对象。看起来像
ObservableCollection
不是协变的,所以需要显式转换。
object CurrentItems