考虑到身份属性可能为空,以下哪一项是正确/更好的。
public override int GetHashCode()
{
if (ID == null) {
return base.GetHashCode();
}
return ID.GetHashCode();
}
或者
public override int GetHashCode()
{
if (ID != null) {
return ID.GetHashCode();
}
return 0;
}
更新 1:更新了第二个选项。
更新 2:以下是 Equals 实现:
public bool Equals(IContract other)
{
if (other == null)
return false;
if (this.ID.Equals(other.ID)) {
return true;
}
return false;
}
public override bool Equals(object obj)
{
if (obj == null)
return base.Equals(obj);
if (!obj is IContract) {
throw new InvalidCastException("The 'obj' argument is not an IContract object.");
} else {
return Equals((IContract)obj);
}
}
ID是string
类型。