我正在尝试使用以下代码修复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
请告诉我我错在哪里,或者有另一种方式......
答案 0 :(得分:1)
一旦添加了所需的所有元素,就需要实现IDictionary
的只读版本,然后可以使用该版本禁止更改现有条目(查看子类Hashtable
,以及覆盖所有改变值以抛出NotSupportedException
)的方法/属性。然后,您可以覆盖IsReadOnly
和IsFixedSize
以返回您需要的任何值。
我还建议您使用通用Dictionary<TKey, TValue>
而不是Hashtable
,因为您可以获得更好的编译时安全性和更好的值类型性能。但是,您必须创建自己的IDictionary<TKey, TValue>
只读实现,因为没有任何Dictionary方法是虚拟的。
答案 1 :(得分:0)
带有int capacity参数的HashTable构造函数重载仅将它用作来自您的提示,以及它应该能容纳多少个值。这可以提高HashTable填充时的速度和内存消耗,但它可以增长到比这个初始容量更多的值。这就是为什么你可以添加2个以上的值。