在小组里遇到的一个让我产生迷惑的题

本文探讨了Hashtable和Dictionary在处理null键值对时的行为差异。通过实际编程实验发现,Hashtable允许直接使用null作为键进行判断,而Dictionary则会抛出KeyNotFoundException异常。最终建议使用ContainsKey方法来检查键的存在。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如上图,我模糊记得好像是hashtable是可以存一个'null'的key,值为'null'的键值对的,所以判断上面的那个是正确的···
然后看别人的,说,hashtable存的是对象,可以直接跟null判断,dictionary<string,string>存的是引用,不能直接判断···
接着又看到有人说,这两个都是错的,因为这两个都可以存一个键和值都为'null'的键值对···
这下我的脑袋瓜子彻底变浆糊了···
想起一句话,“实践出真知”,把代码敲出来运行了下下,嘿,事实证明,hashtable的判断是正确的,因为它出结果了,而dictionary<string,string>没有,可是为什么了?
我try{}catch{}了下下,发现,dictionary<string,string>抛出了一个KeyNotfoundException的异常,而且是 throw的,想了下,这可能是hashtable存的是对象,可以直接跟null判断,dictionary<string,string>存的是引用,上面题中,都只是声明而没有赋值,hashtable因为是存对象的,所以可以直接判断,dictionary<string,string>存的是引用,在找“name1”的引用是,发现不存在,所以就抛出了KeyNotfoundException异常。
总结:hashtable因为存的是对象,所以可以直接跟null判断,而dictionary<string,string>存的是引用,需要先判断查找的key是否存在,然后才能跟null判断。
刚又临时起意,给这个题目里的两个东东在声明之后,都添加一个了一个键值对,ht.Add("name1", null);和dt.Add("name2", null);,然后果然出现问题了,两个if判断里的东西都会执行了,这明显不是我们要的结果,name1和name2明明都存在的,结果这么一判断成不存在了,很复杂,感觉这题出的有问题了,我们应该是去判断这个键是否存在才是,ht.ContainsKey("name1")和dt.ContainsKey("name2")这样才是正解。--By 2011-4-27 14:00:00
                                                ----菜鸟见识,错者请指出

转载于:https://www.cnblogs.com/13142088/archive/2011/04/27/2030208.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值