这不是一个问题,更多的东西让我觉得奇怪:ObservableCollection
类是通用的,但是在更改为集合时引发的CollectionChanged
事件不是。这意味着在事件处理程序中,您必须将您从事件参数对象获得的集合中的所有对象都转换为适当的项目类型。C#:ObservableCollection - 为什么没有通用的“CollectionChanged”事件?
但是,不应该简单地将该事件设置为通用的吗?喜欢的东西
public virtual event NotifyCollectionChangedEventHandler<T> CollectionChanged;
与
public delegate void NotifyCollectionChangedEventHandler(object sender, NotifyCollectionChangedEventArgs<T> e);
然后
public class NotifyCollectionChangedEventArgs<T> {
// ...
public IList<T> NewItems { get; }
public IList<T> OldItems { get; }
毕竟,类型参数T
由有关ObservableCollection
的声明,这意味着你永远不应该已经确定无论如何都可以将任何类型不是T
(或兼容)的对象添加到集合中。因此,所有这些应该是完全类型安全的,并且节省我们不得不将事件处理程序内的对象转换为我们知道它们应该拥有的任何类型的麻烦。
有没有理由不这样做,我失踪了?即这是一个有意识的设计desicion,或者只是一个疏忽?
如果我记得没错(但我很可能是错的),这与WPF有关,它无法使用泛型,但需要知道如何听集合更改(ObservableCollection是为了WPF而引入的基本上这是有道理的) – Polity 2012-02-21 13:19:43