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