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)); }
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); }