Как проверить равенство выражений
Возможный дубликат:
Самый эффективный способ проверить равенство лямбда-выражений
Как проверить, совпадают ли два выражения> ;
Как проверить, что два выражения совпадают с этим примером
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, поскольку они имеют одинаковые критерии?
2 ответа
Вот код для ExpressionEqualityComparer
который может показать, как это сделать.
https://source.db4o.com/db4o/trunk/db4o.net/Db4objects.Db4o.Linq/Db4objects.Db4o.Linq/Expressions/
Если вы хотите проверить, равны ли выражения, а не только то, что они всегда вычисляются одинаково, вы можете сделать это:
exp1.ToString() == exp2.ToString()
Обратите внимание, что даже незначительные изменения приведут к тому, что это вернет false, как, например, j => j.Contains(firstname)
или используя exp2
из этого класса:
public class Test
{
static string firstname;
public static Expression<Func<string, bool>> exp2 = s => s.Contains(firstname);
}
(хотя лямбды выглядят одинаково в коде, ToString
показывает, что кто-то использует Test.firstname
а другой использует сгенерированный компилятором класс firstname
)
Тем не менее, это может быть полезно в зависимости от того, откуда приходят ваши выражения.