Esempio n. 1
0
        public void EqualsWhenValueIsNull()
        {
            ConstantExpression expr1 = new ConstantExpression(null);
            ConstantExpression expr2 = new ConstantExpression(null);
            ConstantExpression expr3 = new ConstantExpression("foo");

            Assert.IsTrue(expr1.Equals(expr1));
            Assert.IsTrue(expr1.Equals(expr2));
            Assert.IsTrue(expr2.Equals(expr1));
            Assert.AreEqual(expr1.GetHashCode(), expr2.GetHashCode());

            Assert.IsFalse(expr1.Equals(expr3));
            Assert.IsFalse(expr3.Equals(expr1));
        }
Esempio n. 2
0
        public void Equals()
        {
            ConstantExpression expr1 = new ConstantExpression(123);
            ConstantExpression expr2 = new ConstantExpression(124);
            ConstantExpression expr3 = new ConstantExpression(123);

            Assert.IsTrue(expr1.Equals(expr1));
            Assert.IsTrue(expr1.Equals(expr3));
            Assert.IsTrue(expr3.Equals(expr1));
            Assert.AreEqual(expr1.GetHashCode(), expr3.GetHashCode());

            Assert.IsFalse(expr1.Equals(123));
            Assert.IsFalse(expr1.Equals(expr2));
            Assert.IsFalse(expr2.Equals(expr1));

            Assert.IsFalse(expr1.Equals(null));
        }
        public int GetHashCode(Expression x)
        {
            LambdaExpression lambdaExpressionX = x as LambdaExpression;

            if (lambdaExpressionX != null)
            {
                return(XorHashCodes(lambdaExpressionX.Parameters) ^
                       GetHashCode(lambdaExpressionX.Body));
            }

            BinaryExpression binaryExpressionX = x as BinaryExpression;

            if (binaryExpressionX != null)
            {
                int methodHashCode = binaryExpressionX.Method != null?binaryExpressionX.Method.GetHashCode() : binaryExpressionX.NodeType.GetHashCode();

                return(methodHashCode ^
                       GetHashCode(binaryExpressionX.Left) ^
                       GetHashCode(binaryExpressionX.Right));
            }

            UnaryExpression unaryExpressionX = x as UnaryExpression;

            if (unaryExpressionX != null)
            {
                int methodHashCode = unaryExpressionX.Method != null?unaryExpressionX.Method.GetHashCode() : unaryExpressionX.NodeType.GetHashCode();

                return(methodHashCode ^
                       GetHashCode(unaryExpressionX.Operand));
            }

            MethodCallExpression methodCallExpressionX = x as MethodCallExpression;

            if (methodCallExpressionX != null)
            {
                return(XorHashCodes(methodCallExpressionX.Arguments) ^
                       methodCallExpressionX.Method.GetHashCode() ^
                       GetHashCode(methodCallExpressionX.Object));
            }

            ConditionalExpression conditionalExpressionX = x as ConditionalExpression;

            if (conditionalExpressionX != null)
            {
                return
                    (GetHashCode(conditionalExpressionX.Test) ^
                     GetHashCode(conditionalExpressionX.IfTrue) ^
                     GetHashCode(conditionalExpressionX.IfFalse));
            }

            InvocationExpression invocationExpressionX = x as InvocationExpression;

            if (invocationExpressionX != null)
            {
                return
                    (XorHashCodes(invocationExpressionX.Arguments) ^
                     GetHashCode(invocationExpressionX.Expression));
            }

            MemberExpression memberExpressionX = x as MemberExpression;

            if (memberExpressionX != null)
            {
                return
                    (memberExpressionX.Member.GetHashCode() ^
                     GetHashCode(memberExpressionX.Expression));
            }

            ConstantExpression constantExpressionX = x as ConstantExpression;

            if (constantExpressionX != null)
            {
                int valueHash = constantExpressionX.Value != null?constantExpressionX.Value.GetHashCode() : constantExpressionX.GetHashCode();

                return(valueHash);
            }

            NewExpression newExpressionX = x as NewExpression;

            if (newExpressionX != null)
            {
                return
                    (XorHashCodes(newExpressionX.Arguments) ^
                     newExpressionX.Constructor.GetHashCode());
            }

            return(0);
        }