如果我想使用对象作为Dictionary
的键,我需要重写哪些方法以使其以特定方式进行比较?
说我有一个具有属性的类:
class Foo {
public string Name { get; set; }
public int FooID { get; set; }
// elided
}
我想创建一个:
Dictionary<Foo, List<Stuff>>
我希望具有相同
Foo
的FooID
对象被视为同一组。我需要在Foo
类中重写哪些方法?总结一下:我想将
Stuff
对象分类为列表,并按Foo
对象分组。 Stuff
对象将具有一个FooID
将它们链接到其类别。 最佳答案
默认情况下,两个重要方法是GetHashCode()
和Equals()
。重要的是,如果两个条件相等(Equals()
返回true),则它们具有相同的哈希码。例如,您可以“返回FooID;”。如果您希望将其作为GetHashCode()
进行匹配。您也可以实现IEquatable<Foo>
,但这是可选的:
class Foo : IEquatable<Foo> {
public string Name { get; set;}
public int FooID {get; set;}
public override int GetHashCode() {
return FooID;
}
public override bool Equals(object obj) {
return Equals(obj as Foo);
}
public bool Equals(Foo obj) {
return obj != null && obj.FooID == this.FooID;
}
}
最后,另一种选择是提供
IEqualityComparer<T>
来执行相同的操作。