Вы пытались использовать Expression.Equal
, указав используемую реализацию?
В C #:
MethodInfo referenceEquality = typeof(object).GetMethod("ReferenceEquals",
BindingFlags.Static | BindingFlags.Public);
Expression equality = Expression.Equal(lhs, rhs, true, referenceEquality);
Вот полный пример (опять же, C # - но вы должны легко его перевести):
using System;
using System.Reflection;
using System.Linq.Expressions;
class Test
{
static void Main()
{
var lhs = Expression.Parameter(typeof(string), "lhs");
var rhs = Expression.Parameter(typeof(string), "rhs");
MethodInfo referenceEquality = typeof(object).GetMethod
("ReferenceEquals", BindingFlags.Static | BindingFlags.Public);
var equality = Expression.Equal(lhs, rhs, true, referenceEquality);
var lambda = Expression.Lambda<Func<string, string, bool>>
(equality, new[] { lhs, rhs });
var compiled = lambda.Compile();
string x = "hello";
string y = x;
string z = new string(x.ToCharArray());
Console.WriteLine(compiled(x, y)); // True
Console.WriteLine(compiled(x, z)); // False
}
}