C#中HashTable的定义与使用方法


在C#中,`Hashtable` 是一种包含键值对的集合,与 .NET 中的其他集合(如 `Dictionary`)相比,`Hashtable` 是非泛型的,它使用 `object` 类型作为键和值的类型。这意呀着在添加或检索元素时,你可能需要进行类型转换。不过,对于不需要泛型支持的旧代码或特殊场景,`Hashtable` 仍然是一个有用的选项。

### 定义 Hashtable

首先,你需要引入 `System.Collections` 命名空间来使用 `Hashtable`。


using System.Collections;

class Program
{
    static void Main()
    {
        // 创建一个 Hashtable 实例
        Hashtable myHashtable = new Hashtable();

        // 向 Hashtable 添加元素
        myHashtable.Add("key1", "value1");
        myHashtable.Add(1, "value2"); // 注意键也可以是任何对象类型

        // 后续使用...
    }
}

### 使用 Hashtable

你可以使用 `ContainsKey` 和 `ContainsValue` 方法来检查 `Hashtable` 是否包含特定的键或值。使用键(通过 `object` 类型)作为索引来检索值。


// 检查 Hashtable 是否包含特定的键
if (myHashtable.ContainsKey("key1"))
{
    Console.WriteLine("Contains key1");
}

// 检索并输出值
// 注意类型转换,因为 Hashtable 使用 object 类型
string value1 = (string)myHashtable["key1"];
Console.WriteLine(value1); // 输出: value1

// 使用索引器获取值时,如果键不存在,会抛出 ArgumentException
// 因此,使用 TryGetValue 方法是更安全的选择
object tempValue;
if (myHashtable.TryGetValue("key2", out tempValue))
{
    Console.WriteLine($"Found key2: {tempValue}");
}
else
{
    Console.WriteLine("key2 not found");
}

// 遍历 Hashtable
foreach (DictionaryEntry entry in myHashtable)
{
    Console.WriteLine($"Key = {entry.Key}, Value = {entry.Value}");
}

请注意,虽然 `Hashtable` 在某些情况下很有用,但在大多数现代 .NET 应用程序中,更推荐使用 `Dictionary`,因为它提供了类型安全和更好的性能。

这就是在 C# 中定义和使用 `Hashtable` 的基本方法。