本文摘自PHP中文网,作者黄舟,侵删。
浅谈C# 之 Hashtable 与 Dictionary的代码实例:Dictionary<TKey, TValue> () Hashtable()
第一、存储的数据类型
Hashtable不是泛型的,不是类型安全的;Dictionary是泛型的,是类型安全的;
Hashtable的键值都是Object类型的,但是Dictionary的键值的数据类型是可以指定的。
也就是说如果往Hashtable里面存入Object以外的数据类型,则在取出该数据时,需要对其进行显示的类型转换,才能够正常使用。而Dictionary则没有这个问题。
从这方面讲的话,Hashtable相当于Dictionary<Object,Object>
1 2 3 4 5 6 7 |
|
第二、读取数据的顺序与添加数据的顺序的一致性
Dictionary和Hashtable的读取数据的顺序和添加数据时的数据的顺序的一致性均不能够保证,或者可以说没有一致性。
Dictionary在只添加不删除的时候能够保持读取数据的顺序和添加时候的顺序是一致的;
但是经过删除和添加操作之后,就不能够保证读取数据的顺序和添加时候的顺序一致了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
对于Dicitionary而言,如果从中删除一个元素,则之后新添加的元素会填补这个被删除元素的位置,因而致使添加数据的顺序与读取数据的顺序是不一致的。
对于Hashtable而言,它的数据存储顺序是按一定的算法算出来的,所以绝大多数情况下,它的数据读取顺序和数据添加顺序是不一致的。
所以如果你需要保持数据添加时的顺序的时候,最好不要用Dictionary和Hashtable。
第三、当用一个不存在的Key值到Hashtable或者Dictionary中取值时
对于Hashtable而言,如果用一个不存在的Key值进行取值的话,会返回一个null;
1 2 3 |
|
对于Dictionary而言,如果用一个不存在的Key值进行取值的话,会引发“System.Collections.Generic.KeyNotFoundException”类型的异常。
所以在从Dictionary或者Hashtable取值时,可以先判断Key值是否存在(用ContainsKey()方法进行判断),以防止出现预期以外的值或者异常。
第四、线程安全性
Dictionary不是线程安全的,Hashtable是线程安全的。
以上就是浅谈C# 之 Hashtable 与 Dictionary的代码实例的详细内容!
相关阅读 >>
详细介绍c# 中 asp.net web api 的 roc
c#如何连接数据库?oledbconnection与sqlconnection的区别
更多相关阅读请进入《Hashtable》频道 >>
C#高级编程(第11版) C# 7 & .NET Core 2.0(.NET开发经典名著)
作者:[美]克里斯琴·内格尔(Christian Nagel)著。出版时间:2019年3月。