Example #1
0
        public static object FindObject(Expression expression)
        {
            var visitor = new ObjectFinder();

            visitor.Visit(expression);
            return(visitor._obj);
        }
Example #2
0
        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)}.");
            }
        }