C#中Hashtable的定义与基本使用方法
在.NET开发中,当需要处理非泛型的键值对集合时,Hashtable 是一个常用的选择。它位于 System.Collections 命名空间下,支持任意类型的对象作为键和值,但在类型安全性和性能上不如泛型 Dictionary<TKey, TValue>。
结果或目标
掌握 Hashtable 的核心操作方法,能够独立完成数据的增删改查及特定需求的遍历展示。
准备条件
- 项目引用了
System.Collections命名空间。 - 已创建
Hashtable实例。
真实操作顺序
第1步:初始化与添加数据
目的: 建立哈希表容器并填入初始测试数据。
操作入口: Main 方法或业务逻辑函数。
动作与参数:
1. 使用 new Hashtable() 创建实例。
2. 调用 Add(object key, object value) 插入键值对。
using System;
using System.Collections;
class Program
{
public static void Main()
{
// 创建 Hashtable 实例
Hashtable ht = new Hashtable();
// 添加 key-value 键值对
ht.Add("E", "e");
ht.Add("A", "a");
ht.Add("C", "c");
ht.Add("B", "b");
}
}
注意: 如果键已存在且未处理异常,再次调用 Add 会抛出异常。在 .NET Framework 较新版本或生产环境中,建议使用 ContainsKey 预检或使用 TryGetValue 模式,但基础演示中直接 Add 更为直观。
第2步:查询与判断存在性
目的: 根据 Key 获取 Value 或判断 Key 是否存在。
重要参数: 待查询的 Key 对象。
// 根据 Key 获取 Value(注意需进行类型转换)
string s = (string)ht["A"];
// 判断哈希表是否包含特定键
if (ht.ContainsKey("E"))
{
Console.WriteLine("The E key exists.");
}
else if (ht.Contains("E"))
{
// Contains 方法同样用于检查 Key 的存在性
Console.WriteLine("Key Found.");
}
完成状态: 变量 s 成功获取到值 "a";控制台输出包含 "E key exists" 字样。
第3步:移除元素
目的: 从表中删除指定项或清空所有项。
动作:
1. 删除指定 Key:调用 Remove(object key)。
2. 清空所有元素:调用 Clear()。
// 移除指定的 key-value 键值对
ht.Remove("C");
// 此时 A 仍然存在,可以正常访问
Console.WriteLine(ht["A"]); // 输出: a
// 移除所有元素
ht.Clear();
// 清空后访问已不存在的 Key 将返回 null
Console.WriteLine(ht["A"]); // 无输出或输出 null
第4步:遍历哈希表
目的: 逐一读取每个键值对的内容。
操作技巧: 由于 Hashtable 是非泛型的集合,遍历时需要使用 DictionaryEntry 结构体来分别获取 Key 和 Value。
// 重新填充数据以便演示遍历
ht.Add("X", "x");
ht.Add("Y", "y");
// 使用 foreach 循环遍历
foreach (DictionaryEntry de in ht)
{
Console.WriteLine("Key: " + de.Key);
Console.WriteLine("Value: " + de.Value);
}
第5步:按 Key 排序输出
目的: 哈希表本身是无序的,若需按字母顺序或其他规则展示内容,需借助外部工具。
操作步骤:
1. 提取所有的 Key 到一个 ArrayList 中。
2. 调用 Sort() 方法对 Key 列表进行排序。
3. 遍历排序后的 Key 列表,再从原 Hashtable 中提取对应的 Value。
// 创建一个新的 ArrayList 存放 Keys
ArrayList akeys = new ArrayList(ht.Keys);
// 按字母顺序进行排序
akeys.Sort();
// 遍历排序后的 Keys,并从原 Hashtable 取值输出
foreach (string skey in akeys)
{
Console.Write(skey + ": ");
Console.WriteLine(ht[skey]);
}
注意: ArrayList 也属于 System.Collections 非泛型集合,现代 C# 开发中更推荐使用 List<T> 配合 Linq.OrderBy() 实现类似功能以获得更好的类型安全。
简要总结
Hashtable 是早期 C# 版本处理字典数据的主要手段,适用于需要动态存储异构对象的场景。虽然它在易用性上表现良好,但其装箱/拆箱开销较大且缺乏编译时的类型检查。对于新建项目,建议优先考虑 Dictionary<K,V>;而在维护旧代码或兼容低版本框架时,理解上述增、删、查、排的操作流程至关重要。
以上就是 C# Hashtable 定义与详细使用方法的详细内容,更多关于 C# 集合类操作及其他数据结构应用的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









