gpt4 book ai didi

c# - 通用列表转换

转载 作者:太空宇宙 更新时间:2023-11-03 11:25:23 25 4
gpt4 key购买 nike

我有三个类(class)

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 as

object CurrentItems

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

最佳答案

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

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com