У меня есть функция, которая принимает Expression<Func<T>>
в качестве аргумента и возвращает пользовательский класс
MyExpressionInfo GetExpressionInfo<T>(Expression<Func<T>> expression)
Для любого выражения, с предположением, что выражение «указывает на» свойство, как я могуполучите PropertyInfo для конечного свойства в выражении и экземпляра объекта, который имеет это PropertyInfo.
Примеры
var info = GetExpressionInfo(myObject.AProperty);
var info2 = GetExpressionInfo(GetSomething().AProperty);
var info3 = GetExpressionInfo(GetSomethingElse().AProperty.GetThirdThing().AProperty);
Так что в приведенном выше примере я хочу, чтобы результат был
- myObject в качестве ссылки, PropertyInfo для AProperty в качестве свойства
- Результат GetSomething () в качестве ссылки, PropertyInfo для AProperty в качестве свойства
- Результат GetSomethingElse ().AProperty.GetThirdThing () в качестве ссылки
Я могу сделать первую часть, получая PropertyInfo следующим образом:
MemberExpression memberExpression = (MemberExpression)expression.Body;
PropertyInfo boundPropertyInfo = memberExpression.Member as PropertyInfo;
if (boundPropertyInfo == null)
throw new ApplicationException("Bound expression does not resolve to a Property");
Как мне получить разрешение для значения для остальной частивыражение