📜  C#中Hashtable和Dictionary的区别(1)

📅  最后修改于: 2023-12-03 14:39:48.351000             🧑  作者: Mango

C#中Hashtable和Dictionary的区别

在C#中,Hashtable和Dictionary是两个常用的集合类,它们都可以用来存储键值对。然而,它们之间还有许多区别,下面将对它们进行详细的对比介绍。

1. 命名空间

Hashtable和Dictionary都位于System.Collections命名空间下。

2. 异同点
相同点
  1. 都是一种键值对的集合类。
  2. 都支持泛型和非泛型两种形式。
  3. 都可通过索引(key)来访问、插入、删除元素。
不同点
  1. Hashtable是非泛型的,Dictionary是泛型的,因此Dictionary在编译阶段会完成类型检查,增加了代码的安全性。
  2. Hashtable中的Key和Value都是object类型,存入和读取时都需要做类型转换。而Dictionary使用泛型,Key和Value的类型可以指定,不需要类型转换,代码更加简洁。
  3. Hashtable是基于HashTable类实现,Dictionary是基于Dictionary类实现。因为Dictionary是新的类,它实现了IEnumerable接口,能够通过foreach语句进行迭代,而Hashtable不支持这种操作。
  4. Hashtable在添加元素时,如果key重复则会覆盖原来的元素,而Dictionary则会抛出异常。
3. 代码示例

下面是Hashtable和Dictionary的基本用法示例:

创建Hashtable
Hashtable ht = new Hashtable();
ht.Add("01", "张三");
ht.Add("02", "李四");
ht.Add("03", "王五");
创建Dictionary
Dictionary<string, string> dic = new Dictionary<string, string>();
dic.Add("01", "张三");
dic.Add("02", "李四");
dic.Add("03", "王五");
访问Hashtable
string name = (string)ht["01"];
访问Dictionary
string name = dic["01"];
遍历Hashtable
foreach (DictionaryEntry de in ht)
{
    Console.WriteLine("Key :{0},Value:{1}", de.Key, de.Value);
}
遍历Dictionary
foreach (KeyValuePair<string, string> kvp in dic)
{
    Console.WriteLine("Key :{0},Value:{1}", kvp.Key, kvp.Value);
}
4. 总结

Hashtable和Dictionary都是C#中常用的集合类,它们虽然都可以存储键值对,但在实际使用中需要根据需求进行选择,考虑其中的异同点和使用场景来选择合适的集合类。