Выражение для членов типа приводит к различным выражениям (MemberExpression, UnaryExpression)

Описание

У меня есть выражение, указывающее на свойство моего типа. Но это не работает для каждого типа свойства. "Не значит" означает, что это приводит к различным типам выражений. Я думал, что это когда-нибудь приведет кMemberExpression Но это не так.

Заint а такжеGuid это приводит кUnaryExpression и дляstring в .MemberExpression

Я немного смущен ;)

Пример кода

Мои занятия

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

Тестовый код

Person p = new Person { Age = 16, Name = "John" };

Expression expression1 = x => x.Age;
// expression1.Body = UnaryExpression;

Expression expression2 = x => x.Name;
// expression2.Body = MemberExpression;
Вопрос

Как я могу сравнить два выражения и проверить, означают ли они один и тот же тип и одно и то же свойство?

Обновить, ответить и заполнить образец

Спасибо пользователюdasblinkenlight который привел меня на правильный путь.

Он предоставил метод

private static MemberExpression GetMemberExpression(
    Expression exp
) {
    var member = expr.Body as MemberExpression;
    var unary = expr.Body as UnaryExpression;
    return member ?? (unary != null ? unary.Operand as MemberExpression : null);
}

Я написал следующий метод расширения, чтобы сравнить результатыGetMemberExpression методы и проверьте, еслиGetMemberExpression().Member.Name подобные.

private static bool IsSameMember(this Expression expr1, Expression expr2)
{
    var result1 = GetMemberExpression(expr1);
    var result2 = GetMemberExpression(expr2);

    if (result1 == null || result2 == null)
       return false;

    return result1.Member.Name == result2.Member.Name;
}

Ответы на вопрос(2)

Ваш ответ на вопрос