public static object FindObject(Expression expression) { var visitor = new ObjectFinder(); visitor.Visit(expression); return(visitor._obj); }
internal static object GetValue([NotNull] this LambdaExpression lambdaExpression) { if (lambdaExpression == null) { throw new ArgumentNullException(nameof(lambdaExpression)); } var memberExpression = lambdaExpression.MemberExpression(); var obj = ObjectFinder.FindObject(lambdaExpression); switch (memberExpression.Member.MemberType) { case MemberTypes.Property: var property = (PropertyInfo)memberExpression.Member; return(property.GetValue(obj)); case MemberTypes.Field: return(((FieldInfo)memberExpression.Member).GetValue(obj)); default: throw new ArgumentException($"Member must be either a {nameof(MemberTypes.Property)} or a {nameof(MemberTypes.Field)}."); } }