要实现C#中Hashtable的自定义键类型,首先需要创建一个自定义的类作为键类型,然后重写该类的Equals和GetHashCode方法。这样可以确保Hashtable在查找键值对时能够正确比较自定义键类型的实例。
下面是一个示例代码,演示了如何实现自定义键类型的Hashtable:
using System;
using System.Collections;
// 自定义键类型
public class CustomKey
{
public int Id { get; set; }
public string Name { get; set; }
public override bool Equals(object obj)
{
if (obj == null || GetType() != obj.GetType())
{
return false;
}
CustomKey other = (CustomKey)obj;
return Id == other.Id && Name == other.Name;
}
public override int GetHashCode()
{
return Id.GetHashCode() ^ Name.GetHashCode();
}
}
class Program
{
static void Main()
{
Hashtable hashtable = new Hashtable();
CustomKey key1 = new CustomKey { Id = 1, Name = "Key1" };
CustomKey key2 = new CustomKey { Id = 2, Name = "Key2" };
hashtable[key1] = "Value1";
hashtable[key2] = "Value2";
Console.WriteLine(hashtable[key1]); // 输出 "Value1"
Console.WriteLine(hashtable[key2]); // 输出 "Value2"
}
}
在上面的示例中,我们创建了一个名为CustomKey的自定义键类型,其中包含Id和Name属性。然后重写了Equals和GetHashCode方法,以确保键值对在Hashtable中的正确比较。
在Main方法中,我们创建了一个Hashtable实例,并用自定义键类型作为键,将值存储在Hashtable中。最后,我们通过自定义键类型来获取值,并输出结果。