c# Dictionary 的key是一个类,如何比较类
时间: 2024-12-13 10:28:17 浏览: 8
在 C# 中,如果你希望在 `Dictionary<TKey, TValue>` 中使用一个自定义的类作为键,你需要为该类实现 `IEquatable<TKey>` 或者 `GetHashCode()` 和 `Equals(object)` 这两个方法。这是因为 `Dictionary<TKey, TValue>` 内部依赖于这两个方法来进行键的比较。
首先,确保你的类具有如下成员:
```csharp
public class MyClass : IEquatable<MyClass>
{
public string MyProperty { get; set; }
// 实现 IEquatable<MyClass>
public bool Equals(MyClass other)
{
// 比较 MyProperty 属性是否相等
return this.MyProperty == other.MyProperty;
}
// 重写 GetHashCode,确保每次实例返回相同的哈希值,除非对象内容改变
public override int GetHashCode()
{
return HashCode.Combine(this.MyProperty);
}
// 为了兼容旧版本.NET Framework,提供一个静态版 GetHashCode 方法
public static bool operator ==(MyClass left, MyClass right)
{
return left.Equals(right);
}
public static bool operator !=(MyClass left, MyClass right)
{
return !left.Equals(right);
}
}
```
现在,你可以在 `Dictionary` 中使用这种键了:
```csharp
Dictionary<MyClass, object> dict = new Dictionary<MyClass, object>();
dict.Add(new MyClass { MyProperty = "Value1" }, "Data1");
dict.Add(new MyClass { MyProperty = "Value2" }, "Data2");
// 查找和操作
MyClass key = new MyClass { MyProperty = "Value1" };
if (dict.ContainsKey(key))
{
Console.WriteLine(dict[key]);
}
// 注意,因为你在 MyClass 上实现了 IEquatable,所以 Dictionary 自动使用这个实现来比较键
```
阅读全文