更多地回复覆盖操作员如何与在此处重定向为重复的 null 进行比较。
在这样做以支持值对象的情况下,我发现新的符号很方便,并且希望确保只有一个地方进行比较。还利用 Object.Equals(A, B) 简化了空检查。
这将重载 ==、!=、Equals 和 GetHashCode
public static bool operator !=(ValueObject self, ValueObject other) => !Equals(self, other);
public static bool operator ==(ValueObject self, ValueObject other) => Equals(self, other);
public override bool Equals(object other) => Equals(other as ValueObject );
public bool Equals(ValueObject other) {
return !(other is null) &&
// Value comparisons
_value == other._value;
}
public override int GetHashCode() => _value.GetHashCode();
对于更复杂的对象,在 Equals 和更丰富的 GetHashCode 中添加额外的比较。