如何修复Hashtable的大小并找出它是否有修复大小?

时间:2010-06-07 09:37:57

标签: c# asp.net hashtable collections

我正在尝试使用以下代码修复Hashtable的大小。

       Hashtable hashtable = new Hashtable(2);

        //Add elements in the Hashtable
        hashtable.Add("A", "Vijendra");
        hashtable.Add("B", "Singh");
        hashtable.Add("C", "Shakya");
        hashtable.Add("D", "Delhi");
        hashtable.Add("E", "Singh");
        hashtable.Add("F", "Shakya");
        hashtable.Add("G", "Delhi");
        hashtable.Add("H", "Singh");
        hashtable.Add("I", "Shakya");
        hashtable.Add("J", "Delhi");

我已修复此Hashtable的大小为2,但我可以在此添加2个以上的元素,为什么会发生这种情况,我做错了什么?

我试图找出这个Hashtable的修复大小不是 hashtable.IsFixedSize ,它总是返回 false

请告诉我我错在哪里,或者有另一种方式......

2 个答案:

答案 0 :(得分:1)

一旦添加了所需的所有元素,就需要实现IDictionary的只读版本,然后可以使用该版本禁止更改现有条目(查看子类Hashtable,以及覆盖所有改变值以抛出NotSupportedException)的方法/属性。然后,您可以覆盖IsReadOnlyIsFixedSize以返回您需要的任何值。

我还建议您使用通用Dictionary<TKey, TValue>而不是Hashtable,因为您可以获得更好的编译时安全性和更好的值类型性能。但是,您必须创建自己的IDictionary<TKey, TValue>只读实现,因为没有任何Dictionary方法是虚拟的。

答案 1 :(得分:0)

带有int capacity参数的HashTable构造函数重载仅将它用作来自您的提示,以及它应该能容纳多少个值。这可以提高HashTable填充时的速度和内存消耗,但它可以增长到比这个初始容量更多的值。这就是为什么你可以添加2个以上的值。