コード例 #1
0
ファイル: ChoObject.cs プロジェクト: commodus/Cinchoo
        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);
                }
            }
        }
コード例 #2
0
        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));
        }
コード例 #3
0
 public static bool operator !=(ChoEquatableObject <T> a, ChoEquatableObject <T> b)
 {
     return(!ChoObject.Equals <ChoEquatableObject <T> >(a, b));
 }
コード例 #4
0
 public static bool operator !=(ChoDisposableObject a, ChoDisposableObject b)
 {
     return(!ChoObject.Equals <ChoDisposableObject>(a, b));
 }
コード例 #5
0
 public static bool operator ==(ChoNullable <T> a, ChoNullable <T> b)
 {
     return(ChoObject.Equals <ChoNullable <T> >(a, b));
 }