我只发现SortedList包含IsFixedSize属性,但在任何地方都找不到这个简单问题的答案。
答案 0 :(得分:1)
此属性是从IDictionary
继承而来的,因为SortedList
实现了它。对于默认的实现false
(as stated in the msdn documentation),此属性将始终返回SortedList
,仅仅是因为默认实现的大小不是固定的。
固定大小意味着通过包装器构造了该集合后,该集合不允许进行任何Add
或Remove
类型的操作(任何会改变基础集合的操作,而不仅是所包含元素的更改), strong>(再次为the docs)。因此,如果您想要固定大小的SortedList
,则应创建自己的包装器,例如
public class SortedListFixed<TKey, TValue> : SortedList<TKey, TValue>
{
private SortedList<TKey, TValue> _list;
public bool IsFixedSize => true;
/** ctors **/
public void Add(TKey key, TValue value) =>
throw InvalidOperationException("This collection is fixed size");
public bool Remove (TKey key) =>
throw InvalidOperationException("This collection is fixed size");
/** etc. for all inherited size-modifying methods **/
}
两个ctor会派上用场,其中一个具有容量,创建具有该容量的基础_list
,而一个包装ctor以现有的SortedList
作为参数。您也可以将后者与一个简洁的扩展方法结合起来,例如:
public static class SortedListExtensions
{
public static SortedListFixed<TKey, TValue> ToFixedSize<TKey, TValue>(
this SortedList<TKey, TValue> list) => new SortedListFixed<TKey, TValue>(list);
}
请注意,它不仅仅是整个实施的指南。