C#-如何创建固定大小的SortedList?

时间:2018-08-22 11:22:31

标签: c# collections sortedlist

我只发现SortedList包含IsFixedSize属性,但在任何地方都找不到这个简单问题的答案。

1 个答案:

答案 0 :(得分:1)

此属性是从IDictionary继承而来的,因为SortedList实现了它。对于默认的实现falseas stated in the msdn documentation),此属性将始终返回SortedList,仅仅是因为默认实现的大小不是固定的。

固定大小意味着通过包装器构造了该集合后,该集合不允许进行任何AddRemove类型的操作(任何会改变基础集合的操作,而不仅是所包含元素的更改), 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);

}

请注意,它不仅仅是整个实施的指南。