C#教程

关注公众号 jb51net

关闭
首页 > 软件编程 > C#教程 > C#中Hashtable与Dictionary的用法

C#中Hashtable与Dictionary的用法对比及选择

作者:AitTech

这篇文章主要介绍了C#中Hashtable与Dictionary的用法对比及选择方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

在C#中,HashtableDictionary都是用于存储键值对的数据结构,但它们之间存在一些关键的区别。

以下是对这些区别的详细说明,并附有示例:

1. 类型安全性

示例:

// Hashtable 示例
Hashtable hashtable = new Hashtable();
hashtable.Add(1, "one"); // 键是 int 类型,值是 string 类型
hashtable.Add("key", 42); // 键是 string 类型,值是 int 类型
// 需要类型转换来检索值
string value1 = (string)hashtable[1];
int value2 = (int)hashtable["key"];

// Dictionary 示例
Dictionary<int, string> dictionary = new Dictionary<int, string>();
dictionary.Add(1, "one"); // 键和值类型明确指定
string valFromDict = dictionary[1]; // 不需要类型转换

2. 存储顺序

示例:

// Hashtable 无序性示例
Hashtable unorderedHashtable = new Hashtable();
unorderedHashtable.Add("a", 1);
unorderedHashtable.Add("b", 2);
unorderedHashtable.Add("c", 3);
// 遍历顺序可能不是 "a", "b", "c"
foreach (DictionaryEntry entry in unorderedHashtable)
{
    Console.WriteLine($"{entry.Key}: {entry.Value}");
}

// Dictionary 有序性示例
Dictionary<string, int> orderedDictionary = new Dictionary<string, int>();
orderedDictionary.Add("a", 1);
orderedDictionary.Add("b", 2);
orderedDictionary.Add("c", 3);
// 遍历顺序将是 "a", "b", "c"
foreach (KeyValuePair<string, int> kvp in orderedDictionary)
{
    Console.WriteLine($"{kvp.Key}: {kvp.Value}");
}

3. 键和值的允许类型

示例:

// Hashtable 允许 null 键和值示例
Hashtable hashtableWithNulls = new Hashtable();
hashtableWithNulls.Add(null, "nullValue");
hashtableWithNulls.Add("nullKey", null);

// Dictionary 不允许 null 键和值示例
try
{
    Dictionary<string, string> dictionaryWithNoNulls = new Dictionary<string, string>();
    dictionaryWithNoNulls.Add(null, "this will throw an exception"); // 将抛出 ArgumentNullException
}
catch (ArgumentNullException ex)
{
    Console.WriteLine(ex.Message); // 输出错误信息
}

4. 线程安全性

5. 性能

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文