Ejemplo n.º 1
0
        protected override Expression BuildAfterExpression(ExpressionBuilderArgs args, ParameterExpression innerResultVar)
        {
            var expressions = new List <Expression>();

            expressions.Add(base.BuildAfterExpression(args, innerResultVar));
            if (_convertValue != null)
            {
                expressions.Add(Expression.Assign(innerResultVar, Invoke(_convertValue, args, innerResultVar)));
            }
            if (_assertValue != null)
            {
                expressions.Add(Expression.IfThen(
                                    Expression.Not(Invoke(_assertValue, args, innerResultVar)),
                                    Expression.Throw(Expression.New(
                                                         typeof(BinaryReadingAssertException).GetConstructor(new[] { typeof(Object), typeof(Object), typeof(String) }),
                                                         Expression.TypeAs(args.InstanceVar, typeof(Object)),
                                                         Expression.TypeAs(innerResultVar, typeof(Object)),
                                                         Expression.Constant(MemberName)))));
            }
            if (_positionAfter != null)
            {
                expressions.Add(Expression.Assign(AdvancedExpression.Position(args.BrParameter), Invoke(_positionAfter, args, innerResultVar)));
            }
            return(Expression.Block(expressions));
        }
Ejemplo n.º 2
0
 protected override Expression BuildBodyExpression(ExpressionBuilderArgs args, ParameterExpression innerResultVar, ParameterExpression typeVar)
 {
     if (_size == null)
     {
         throw new InvalidMappingException("Size of skipped member must be set.");
     }
     return(Expression.AddAssign(AdvancedExpression.Position(args.BrParameter), Expression.Convert(Invoke(_size, args), typeof(BinaryOffset))));
 }
Ejemplo n.º 3
0
        protected override Expression BuildBeforeExpression(ExpressionBuilderArgs args)
        {
            var expressions = new List <Expression>();

            if (_position != null)
            {
                expressions.Add(Expression.Assign(AdvancedExpression.Position(args.BrParameter), Invoke(_position, args)));
            }
            expressions.Add(base.BuildBeforeExpression(args));
            return(Expression.Block(expressions));
        }