【发布时间】:2010-03-03 16:35:41
【问题描述】:
除了SortedList<TKey, TValue>.Keys 属性不支持的操作(例如Add、Remove 和Insert)之外,IList<T> 接口还包括按索引访问。
一个ReadOnlyCollection<T>,比如List<T>.AsReadOnly的返回值,实现了IList<T>,因此提供了索引访问但是通过显式实现来隐藏Add等非法操作 .此外,它只是底层列表的包装器;因此它不会创建副本,因此(我认为)不会对性能造成任何实际影响。
知道为什么SortedList<TKey, TValue.Keys 不是ReadOnlyCollection<TKey> 吗? (就此而言,为什么Values 属性不是ReadOnlyColllection<TValue>?)
【问题讨论】:
-
奇怪的是它不是只读集合,因为如果你这样做 sortedList.Values.Add(2);它抛出异常
-
没错!很好奇……
-
我认为原因是 ReadOnlyCollection 是类而不是接口。使用接口你可以编写自定义存储,但 ReadOnlyCollection 有它自己的
-
据我所知,
ReadOnlyCollection<T>类包装了实现IList<T>的类的any 对象;所以即使Keys属性以它自己的特殊方式实现IList<T>,它仍然可以暴露为一个简单地包装该对象的ReadOnlyCollection<T>,不管它如何实现IList<T>。
标签: .net ilist sortedlist readonly-collection