首页 > 解决方案 > 如何将不同类型的 ObservableCollections 添加到 ObservableCollection

问题描述

我正在尝试添加一个不同类型的ObservableCollectionObservableCollections这些类型来自一个基类,在这个例子中我使用“Animal”。当尝试添加到 时Observable Collection,就像在下面的代码中一样,我收到以下错误:

cannot convert from 'System.Collections.ObjectModel.ObservableCollection<Cat>' to 'System.Collections.ObjectModel.ObservableCollection<Animal>'

.

public ObservableCollection<ObservableCollection<Animal>> Animals { get; set; }
private ObservableCollection<Dog> Dogs = new ObservableCollection<Dog>();
private ObservableCollection<Cat> Cats = new ObservableCollection<Cat>();
private ObservableCollection<Bird> Birds = new ObservableCollection<Bird>();

public DefaultConstructor()
{
    Animals = new ObservableCollection<ObservableCollection<Animal>>()
    { Cats, Dogs, Birds };
}

类示例:

public abstract class Animal
{
    ...
}
public class Dog : Animal
{
    ...
}
public class Cat : Animal
{
    ...
}
public class Bird : Animal
{
    ...
}

我也尝试过ObservableCollection简单地采用 的类型ObservableCollection<object>,但结果是一样的。

标签: c#list

解决方案


考虑为基类和过滤器方法使用单个可观察集合:

public class AnimalContainer : ObservableCollection<Animal>
{
    public IEnumerable<Dog> Dogs => this.Where(animal => animal is Dog).Cast<Dog>();
    public IEnumerable<Cat> Cats => this.Where(animal => animal is Cat).Cast<Cat>();
}

//...
AnimalContainer container = new AnimalContainer();

container.Add(new Dog());
container.Add(new Cat());

int dogsCount = container.Dogs.Count();
int catsCount = container.Cats.Count();

推荐阅读