public void ThrowIf(LambdaExpression condition, string message) { if (condition == null) { throw new ArgumentNullException("condition"); } if (condition.Parameters.Count != 1 || condition.Parameters.Single().Type != type) { throw new InvalidOperationException("Invalid expression parameters"); } if (condition.ReturnType != typeof(bool)) { throw new InvalidOperationException("Invalid return type, must be bool"); } var data = new TypeModifierData { Type = type, Message = message, ThrowIfCondition = condition }; mapper.Data.AddTypeModifierData(data, MappingSides.Source); }
public void ThrowIf(LambdaExpression condition, string message) { if (condition == null) throw new ArgumentNullException("condition"); if (condition.Parameters.Count != 1 || condition.Parameters.Single().Type != type) { throw new InvalidOperationException("Invalid expression parameters"); } if (condition.ReturnType != typeof(bool)) { throw new InvalidOperationException("Invalid return type, must be bool"); } var data = new TypeModifierData { Type = type, Message = message, ThrowIfCondition = condition }; mapper.Data.AddTypeModifierData(data, MappingSides.Source); }
private Expression ProcessTypeModifierData(TypeModifierData data, Expression typeParam) { if (data.ThrowIfCondition != null) { var param = data.ThrowIfCondition.Parameters.Single(); mapProcessor.ParametersToReplace.Add(new ExpressionTuple(param, typeParam)); var message = Expression.Constant(data.Message); var throwException = Expression.Throw(Expression.New(typeof(MappingTerminatedException).GetConstructor(new[] { typeof(string) }), message)); var ifNotConditionThrow = Expression.IfThen(data.ThrowIfCondition.Body, throwException); return ifNotConditionThrow; } return null; }