C#中Hashtable的IsFixedSize方法何时返回True?问题解析
问题原因
你代码里的new Hashtable(3)传入的参数是哈希表的初始容量,它仅用于设置哈希表初始化时分配的存储空间大小,当元素数量超过这个值时,哈希表会自动扩容,本质还是可变大小的集合,因此IsFixedSize返回False。
IsFixedSize属性的核心作用是判断集合是否禁止添加或删除元素,和初始化时指定的容量没有任何关联。
让IsFixedSize返回True的示例代码
using System; using System.Collections; class Program { static void Main() { Hashtable originalHashtable = new Hashtable(3) { { 1, "One" }, { 2, "Two" }, { 3, "Three" } }; // 通过FixedSize方法创建固定大小的哈希表包装器 Hashtable fixedSizeHashtable = Hashtable.FixedSize(originalHashtable); Console.WriteLine(fixedSizeHashtable.IsFixedSize); // 输出True // 验证固定大小特性:尝试添加元素会抛出异常 try { fixedSizeHashtable.Add(4, "Four"); } catch (NotSupportedException ex) { Console.WriteLine(ex.Message); // 输出"集合是固定大小的。" } } }
说明
- 使用
Hashtable.FixedSize()静态方法可以生成一个原哈希表的固定大小包装器,这个包装器不允许执行添加或删除元素的操作,因此IsFixedSize会返回True。 - 该包装器是原哈希表的视图,修改原哈希表中的元素值会同步反映到包装器中,但包装器本身无法新增或删除条目。
内容的提问来源于stack exchange,提问作者Savan Gangani
相关产品推荐
相关产品推荐

