/// <summary> /// You may override this method to provide your own comparison routine. /// </summary> public virtual bool HasSameObjectSignatureAs(ComparableObject compareTo) { var signatureProperties = GetSignatureProperties(); if ((from property in signatureProperties let valueOfThisObject = property.GetValue(this, null) let valueToCompareTo = property.GetValue(compareTo, null) where valueOfThisObject != null || valueToCompareTo != null where (valueOfThisObject == null ^ valueToCompareTo == null) || (!valueOfThisObject.Equals(valueToCompareTo)) select valueOfThisObject).Any()) { return(false); } // If we've gotten this far and signature properties were found, then we can // assume that everything matched; otherwise, if there were no signature // properties, then simply return the default bahavior of Equals return(signatureProperties.Any() || base.Equals(compareTo)); }
/// <summary> /// You may override this method to provide your own comparison routine. /// </summary> public virtual bool HasSameObjectSignatureAs(ComparableObject compareTo) { var signatureProperties = GetSignatureProperties(); if ((from property in signatureProperties let valueOfThisObject = property.GetValue(this, null) let valueToCompareTo = property.GetValue(compareTo, null) where valueOfThisObject != null || valueToCompareTo != null where (valueOfThisObject == null ^ valueToCompareTo == null) || (!valueOfThisObject.Equals(valueToCompareTo)) select valueOfThisObject).Any()) { return false; } // If we've gotten this far and signature properties were found, then we can // assume that everything matched; otherwise, if there were no signature // properties, then simply return the default bahavior of Equals return signatureProperties.Any() || base.Equals(compareTo); }