【发布时间】:2012-11-24 08:54:27
【问题描述】:
我知道在实现自定义相等检查时覆盖GetHashCode 的重要性——为此我实现了IEquality<T> 接口,以及泛型和非泛型Equalsas discussed here. 之间的区别现在有一点覆盖Equals(object t)?不是所有东西都属于通用Equals(T t)吗?
public override int GetHashCode() //required for hashsets and dictionaries
{
return Id;
}
public bool Equals(T other) //IEquatable<T> here
{
return Id == other.Id;
}
public override bool Equals(object obj) //required??
{
return Equals(obj as T);
}
【问题讨论】:
-
注意那里的实现。在通用版本中,您应该将
other考虑为null,因为如果other不是T,obj as T将导致 null。 -
@Jamiec 是的,这只是一个例子。我意识到。谢谢
-
太好了,很高兴您知道。更多地考虑未来的访问者,他们可能会看到这个问题并认为这是实施
IEquatable<T>的正确方法,但它缺少一个重要部分。
标签: c# generics equality iequatable