【问题标题】:How to test expressions equality [duplicate]如何测试表达式相等[重复]
【发布时间】:2012-09-02 01:04:54
【问题描述】:

可能重复:
Most efficient way to test equality of lambda expressions
How to check if two Expression<Func<T, bool>> are the same

如何像这个示例一样测试两个表达式是否相同

        string firstname = "Ahmed";
        Expression<Func<string, bool>> exp1 = (s) => s.Contains(firstname);
        Expression<Func<string, bool>> exp2 = (s) => s.Contains(firstname);

        Console.WriteLine(exp1 == exp2);//print false as two references are no equal

现在如何确保 expression1 等于 expression2 ,因为它们具有相同的条件?

【问题讨论】:

    标签: c# lambda expression


    【解决方案1】:

    如果你想检查表达式是否相等,而不仅仅是它们总是以相同的方式计算,你可以这样做:

    exp1.ToString() == exp2.ToString()
    

    请注意,即使是微不足道的更改也会导致它返回 false,例如将其设为 j =&gt; j.Contains(firstname) 或使用此类中的 exp2

    public class Test
    {
        static string firstname;
        public static Expression<Func<string, bool>> exp2 = s => s.Contains(firstname);
    }
    

    (即使 lambda 在代码中看起来相同,ToStrings 表明一个正在使用 Test.firstname 而另一个正在使用编译器生成的类的 firstname

    不过,这可能会很有用,具体取决于您的表达方式。

    【讨论】:

      【解决方案2】:

      这是ExpressionEqualityComparer 的代码,它可以显示如何操作。

      https://source.db4o.com/db4o/trunk/db4o.net/Db4objects.Db4o.Linq/Db4objects.Db4o.Linq/Expressions/

      【讨论】:

        猜你喜欢
        • 2012-06-02
        • 1970-01-01
        • 1970-01-01
        • 2019-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-06
        • 1970-01-01
        相关资源
        最近更新 更多