C#中Hashtable的定义与基本使用方法

Chloe
Chloe
发布时间:2026-10-15 | 4人浏览过
原创

在.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# 集合类操作及其他数据结构应用的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表