c# - 通用列表转换

标签 c# collections interface

我有三门课

public class OSiteEquipment : IPlantItem
public class OSiteSubSystem : IPlantItem
public class OSiteComponent : IPlantItem

各实现接口(interface)IPlantItem

在我的 xaml 中,我绑定(bind)到一个 Observable 集合,例如

public ObservableCollection<IPlantItem> CurrentItems

有时我需要绑定(bind)CurrentItems到 OSiteEquipments 的集合,有时到 OSiteSubSystem

如果我在加载 View 时尝试设置 CurrentItems,如下所示

CurrentItems = this.siteDocument.Sitestructure.Equipments;

哪里Sitestructure.Equipments是 OSiteEquipment 的可观察集合,编译器说我无法从 Observablecollection<IPlantItem> 转换至Observablecollection<OSiteEquipment>

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

编辑

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

object CurrentItems

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

最佳答案

ObservableCollection<OSiteEquipment> 显式转换至Observablecollection<IPlantItem>也不行。如果您希望它起作用,您需要复制 OSiteEquipment 的元素收藏到新IPlantItem 。但是对原始集合的更改不会影响新集合,因此这不是您想要的。

您已经找到了解决方案,但我认为如果您更改 CurrentItems 的类型会更好至IEnumerable<IPlantItem> 。这不应该影响绑定(bind),但它意味着您的代码更安全且更 self 记录(该属性应该是什么更明显)。

关于c# - 通用列表转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9558495/

相关文章:

c# - 从 .Net 将简单数据插入 Excel 文件的最简单方法

C# : How to calculate aspect ratio

c# - 如何直接反序列化来自web api的json数据

typescript - 使用 TypeScript,我如何强制类实现正确的函数规范?

java - 是否可以拥有一个带有一个指定类型参数和一个泛型类型参数的 Java 接口(interface)?

c# - 将文件批量上传到 Azure 的最快方法 (C#)

java - 有效阻塞查询的建议

java - 检索插入顺序中的 LinkedHashSet 元素并将它们保存到局部变量中

java - ArrayList<class> 交换方法

java - 接口(interface)的默认实现?或保留为空