c# - 如何将不同类型的 ObservableCollections 添加到 ObservableCollection
问题描述
我正在尝试添加一个不同类型的ObservableCollection
。ObservableCollections
这些类型来自一个基类,在这个例子中我使用“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>
,但结果是一样的。
解决方案
考虑为基类和过滤器方法使用单个可观察集合:
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();
推荐阅读
- vba - 有没有办法“按原样”检索与 PowerPoint 演示文稿中的图片相对应的内部存储的 EMF 文件?
- java - Spring JPA 停止关系创建新表
- python - Django inspectdb 省略了整数主键
- python - 在 Python 上无法正常运行的操作顺序。有谁知道发生了什么?
- netlogo - 报告行为空间 Netlogo 中的列表
- php - 生成允许访客将文件上传到服务器的唯一 URL
- node.js - PRN 数据库无法从外部机器访问?
- javascript - 如何仅使用 javascript 使图像在点击时放大?
- prestashop - 如何随着时间的推移限制对产品的访问?
- node.js - 如何将 ConPTY 输出转换为 HTML