【发布时间】:2012-03-11 19:13:38
【问题描述】:
这不是一个问题,更让我感到奇怪的是:ObservableCollection 类是通用的,但它在更改为集合时引发的 CollectionChanged 事件却不是。这意味着在事件处理程序中,您必须自己将从事件 args 对象获得的 NewItems/OldItems 集合中的所有对象转换为正确的项目类型。
但是不应该简单地使该事件通用吗?类似的东西
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 类型的对象(或与其兼容) ) 无论如何都要收藏。所以所有这些都应该是完全类型安全的,并且省去了我们必须将事件处理程序中的对象转换为我们知道它们应该具有的任何类型的麻烦。
我是否有理由不这样做? IE。这是一个有意识的设计决定,还是只是一个疏忽?
【问题讨论】:
-
如果我没记错的话(但我很可能是错的)这与 WPF 有关,它无法使用泛型但需要知道如何监听集合更改(引入了 ObservableCollection为了 WPF,基本上这是有道理的)
标签: c# events generics language-design