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()); }
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)); }