Почему выражения не поддерживают IdentityEquality? - PullRequest
0 голосов
/ 22 сентября 2009

В перечислении ExpressionType нет элемента IdentityEqual. Как построить дерево выражений с помощью оператора VB.NET Is?

1 Ответ

1 голос
/ 22 сентября 2009

Вы пытались использовать 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
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...