为什么 INotifyCollectionChanged 使用 IList
阅读此处,我明白为什么它不是IList
。 但是为什么要使用 IList? 添加它是没有意义的,因此它应该只是一个 IEnumerable,或者如果您确实想要一个索引器(没有理由),请使用 ReadOnlyCollection。
Reading up here, I undestand why it is not IList<T>
. But why IList at all? It makes no sense to add to it, so it should be just an IEnumerable, or if you really want an indexer (no reason why), use a ReadOnlyCollection.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
看一下
NotifyCollectionChangedEventArgs
。它具有 NewStartingIndex 和 OldStartingIndex 属性。
所以设计是基于可索引集合,我认为这对于列表框等来说很方便。
Take a look at
NotifyCollectionChangedEventArgs
.It has
NewStartingIndex
andOldStartingIndex
properties.So the design is based on Indexable collections, I assume this is convenient for eg Listboxes.
索引对于列表虚拟化场景来说是理想的。
IList
是最简单的集合接口,提供对元素的索引访问。 ReadOnlyCollection 是一个具体的类,因此对实现者的限制更大。Indexing is desirable for list virtualisation scenarios.
IList
is the simplest collection interface that provided indexed access to elements.ReadOnlyCollection
is a concrete class and thus far more limiting to implementors.我认为,在
INotifyCollectionChanged
的情况下,您经常需要按组件名称执行查找(因为属性在那里存储为字符串),因此有一个索引器非常重要字符串(底层结构可能应该类似于 HashTable)。在 MSDN 网页上,您可以找到以下建议:
I think that in case of
INotifyCollectionChanged
you often need to perform a look-up for the components by their names (since the properties are stored as strings there), therefore it is essential to have an indexer that takes strings (and the underlying structure should probably be something like HashTable).On MSDN webpage you can find the following recommendation: