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