Esempio n. 1
0
        protected override Func <object, bool> BuildReadOnly()
        {
            var p_obj = Expression.Parameter(typeof(object));

            Expression access   = Expression.MakeMemberAccess(Expression.Convert(p_obj, ObjectType), MemberInfo);
            Expression readOnly = Expression.MakeMemberAccess(access, MemberType.GetProperty("IsReadOnly"));

            return(Expression.Lambda <Func <object, bool> >(readOnly, p_obj).Compile());
        }
Esempio n. 2
0
        private Expression BuildArrayAccess(ParameterExpression p_obj, ParameterExpression p_index)
        {
            var obj = Expression.Convert(p_obj, ObjectType);

            Expression access = Expression.MakeMemberAccess(obj, MemberInfo);

            var length = MemberType.GetProperty("Length");

            var indexer = Expression.Condition(
                Expression.Or(
                    Expression.LessThan(
                        p_index, Expression.Constant(0)),
                    Expression.GreaterThanOrEqual(
                        p_index,
                        Expression.MakeMemberAccess(access, length)
                        )
                    ), Expression.Constant(0), p_index);

            return(Expression.ArrayAccess(access, indexer));
        }