Esempio n. 1
0
        internal bool AreEqual(object x, object y, ref Tolerance tolerance, ComparisonState state)
        {
            this._failurePoints = new List <FailurePoint>();

            if (x == null && y == null)
            {
                return(true);
            }

            if (x == null || y == null)
            {
                return(false);
            }

            if (object.ReferenceEquals(x, y))
            {
                return(true);
            }

            if (state.DidCompare(x, y))
            {
                return(false);
            }

            EqualityAdapter externalComparer = GetExternalComparer(x, y);

            if (externalComparer != null)
            {
                return(externalComparer.AreEqual(x, y));
            }

            foreach (EqualMethod equalMethod in _comparers)
            {
                bool?result = equalMethod(x, y, ref tolerance, state, this);
                if (result.HasValue)
                {
                    return(result.Value);
                }
            }

            return(x.Equals(y));
        }