如上图,我模糊记得好像是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
----菜鸟见识,错者请指出