1

重複の可能性:
ラムダ式の等価性をテストする最も効率的な方法
2 つの Expression<Func<T, bool>> が同じかどうかを確認する方法

このサンプルのように 2 つの式が同じであることをテストする方法

        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

条件が同じであるため、式1が式2と等しいことを確認する方法は?

4

2 に答える 2

4

式が常に同じように評価されるだけでなく、式が等しいかどうかを確認する場合は、次のようにします。

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

わずかな変更でも、このクラスからの作成j => j.Contains(firstname)や使用のように、falseが返されることに注意してください。exp2

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

(ラムダはコード内で同じように見えますが、ToStringsは、一方が使用してTest.firstnameおり、もう一方がコンパイラーで生成されたクラスを使用していることを示していますfirstname

それでも、これは表現の出所によっては役立つ場合があります。

于 2012-09-01T17:04:54.177 に答える
1

これは、その方法を示すことができるコードですExpressionEqualityComparer

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

于 2012-09-01T16:12:37.163 に答える