public override bool Equals(object obj) { if (obj == null || obj.GetType() != GetType()) { return(false); } TValueObject other = (TValueObject)obj; IEnumerator <object> thisValues = GetAtomicValues().GetEnumerator(); IEnumerator <object> otherValues = other.GetAtomicValues().GetEnumerator(); while (thisValues.MoveNext() && otherValues.MoveNext()) { if (ReferenceEquals(thisValues.Current, null) ^ ReferenceEquals(otherValues.Current, null)) { return(false); } if (thisValues.Current != null && !thisValues.Current.Equals(otherValues.Current)) { return(false); } } return(!thisValues.MoveNext() && !otherValues.MoveNext()); }
protected static bool EqualOperator(TValueObject left, TValueObject right) { if (ReferenceEquals(left, null) ^ ReferenceEquals(right, null)) { return(false); } return(ReferenceEquals(left, null) || left.Equals(right)); }
protected static bool NotEqualOperator(TValueObject left, TValueObject right) { return(!(EqualOperator(left, right))); }