การตอบกลับเพิ่มเติมเกี่ยวกับการแทนที่โอเปอเรเตอร์วิธีเปรียบเทียบกับ nullที่เปลี่ยนเส้นทางที่นี่ว่าซ้ำกัน
ในกรณีที่ทำสิ่งนี้เพื่อรองรับ Value Objects ฉันพบว่าสัญกรณ์ใหม่มีประโยชน์และต้องการให้แน่ใจว่ามีเพียงที่เดียวที่ทำการเปรียบเทียบ นอกจากนี้ยังใช้ประโยชน์จาก Object.Equals (A, B) ทำให้การตรวจสอบ null ง่ายขึ้น
สิ่งนี้จะเกิน ==,! =, เท่ากับและ 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 ที่สมบูรณ์ยิ่งขึ้น
Assert.IsFalse(foo2 == foo1);