您可以看一下Linq to db4o内部使用的类型expressionEqualityComparer。它实现了IEqualityComparer
它使用expressionComparison类型比较两个expression是否相等,并使用HashCodeCalculation来根据expression计算哈希码。
所有这些都涉及访问表达式树,因此,如果您反复进行操作,可能会花费很多,但也很方便。
该代码在GPL或dOCL下可用
例如,这是您的测试:
using System;using System.Linq.expressions;using Db4objects.Db4o.Linq.expressions;class Test { static void Main () { expression<Func<int, bool>> a = x => false; expression<Func<int, bool>> b = x => false; expression<Func<int, bool>> c = x => true; expression<Func<int, bool>> d = x => x == 5; Func<expression, expression, bool> eq = expressionEqualityComparer.Instance.Equals; Console.WriteLine (eq (a, b)); Console.WriteLine (eq (a, c)); Console.WriteLine (eq (a, d)); }}它确实会打印True,False,False。


![如何检查两个表达式>相同[重复] 如何检查两个表达式>相同[重复]](http://www.mshxw.com/aiimages/31/381175.png)
