public static bool MemberwiseEquals <T>(T obj1, T obj2) { // If both are null, or both are same instance, return true. if (object.ReferenceEquals(obj1, obj2)) { return(true); } //If one of the object is null, return false; if (object.ReferenceEquals(obj1, null)) { return(false); } if (object.ReferenceEquals(obj2, null)) { return(false); } ChoEqualityComparerAttribute attribute = obj1.GetType().GetCustomAttribute(typeof(ChoEqualityComparerAttribute)) as ChoEqualityComparerAttribute; if (attribute == null) { attribute = obj2.GetType().GetCustomAttribute(typeof(ChoEqualityComparerAttribute)) as ChoEqualityComparerAttribute; } if (attribute != null) { return(attribute.IsEqualCompare(obj1, obj2)); } else { IEnumerable <MemberInfo> memberInfos = obj1.GetType().GetGetFieldsNProperties(); if (memberInfos == null || memberInfos.Count() == 0) { return(true); } else { foreach (MemberInfo memberInfo in memberInfos) { if (!ChoType.IsValidObjectMember(memberInfo)) { continue; } if (ChoType.GetMemberAttribute(memberInfo, typeof(ChoIgnoreEqualAttribute)) != null) { continue; } if (!ChoObject.Equals(GetObjectMemberValue(obj1, memberInfo), GetObjectMemberValue(obj2, memberInfo))) { return(false); } } return(true); } } }
public bool Equals(ChoNullable <T> other) { if (!other.HasValue && !HasValue) { return(true); } if ((other.HasValue && !HasValue) || (!other.HasValue && HasValue)) { return(false); } return(ChoObject.Equals(Value, other.Value)); }
public static bool operator !=(ChoEquatableObject <T> a, ChoEquatableObject <T> b) { return(!ChoObject.Equals <ChoEquatableObject <T> >(a, b)); }
public static bool operator !=(ChoDisposableObject a, ChoDisposableObject b) { return(!ChoObject.Equals <ChoDisposableObject>(a, b)); }
public static bool operator ==(ChoNullable <T> a, ChoNullable <T> b) { return(ChoObject.Equals <ChoNullable <T> >(a, b)); }