4 .net c# collections observablecollection
我有三个共同父母的课程.让我们说父母是动物,孩子是狗,猫和鹦鹉.
我有一个可观察的集合,其中包含用户正在使用的动物集合.收集包含所有相同类型的动物 - 用户只能与所有狗或所有猫或所有鹦鹉一起工作.
因此,我宣布ObservableCollection<Animal>的动物,并根据用户的选择我想物业动物的内容改变ObservableCollection<Dog>或ObservableCollection<Cat>或ObservableCollection<PArrot>.因此,如果用户目前与狗或猫一起工作并不重要,但他可以选择动物共有的所有动作.
但它不起作用.似乎我无法分配ObservableCollection<Cat>属性类型ObservableCollection<animal>.我认为它应该有用,因为动物是猫的超类型,所以我可以像往常一样将猫分配给动物变量.
为什么我不能这样做,我该如何解决这个问题呢?
它不起作用的一个原因:如果它确实有效,你可能会有无意义的情况:
ObservableCollection<Animal> animals = new ObservableCollection<Dog>();
animals.Add(new Cat()); // cat is an animal, after all
Run Code Online (Sandbox Code Playgroud)
另一个原因是它不是ObservableCollection<Dog> 继承 的情况ObservableCollection<Animal>- 它们只是不同(并行)的封闭泛型类型ObservableCollection<>.
什么是允许的是,一些接口与"出只有" API(如IEnumerable<T>)可以是协变的,所以如果你需要的是要遍历它们,你可以有:
IEnumerable<Animal> animals = new ObservableCollection<Dog>();
Run Code Online (Sandbox Code Playgroud)
(大概是把狗放在其他地方)
另一种方法是使用非通用API:
IList animals = new ObservableCollection<Dog>();
Run Code Online (Sandbox Code Playgroud)