Hashtable和Dictionary的一个注意点

       在园子里面看到这样一个话题:Hashtable与Dictionary<TKey,TValue>的一个有趣考题。代码如下:

View Code
1 Hashtable与其泛型实现Dictionary<TKey,TValue>进行如下的判断是否正确?
2
3 Hashtable ht = new Hashtable();
4
5 if (ht["name1"] == null)
6
7 {
8
9 Console.WriteLine("不存在键值为name1的值");
10
11 }
12
13
14 Dictionary<string, string> dt = new Dictionary<string, string>();
15
16 if (dt["name1"] == null)
17
18 {
19
20 Console.WriteLine("不存在键值为name1的值");
21
22 }

       上面的代码经过运行后发现,在dt["name1"]==null这里会抛出异常,而在hashtable不会。需要注意的几点:

       1.Msdn对于Dictionary和Hashtable的解释都是值可以为null而键不能为null。因此使用dt["name1"]==null来判断是否存在键值为name1的值是不合理的,因为有一种情况,就是键值为name1的值存在,但是等于null,应该使用dt.ContainsKey方法来进行判断。对于ht也是一样的。

       2.对于dt要尝试获根据某个键取某个值应该使用dt.TryGetValue方法。

posted @ 2011-05-04 09:25  雁北飞  阅读(577)  评论(0编辑  收藏  举报