private static Expression GetIsValidNumericValueCheck(Expression sourceValue, bool isWholeNumberNumeric) { var rangeCheck = GetNumericRangeCheck(sourceValue); if (isWholeNumberNumeric) { return(rangeCheck); } var isNotWholeNumber = NumericConversions.GetModuloOneIsNotZeroCheck(sourceValue); return(Expression.OrElse(rangeCheck, isNotWholeNumber)); }
private static Expression GetNumericValueValidityCheck(Expression sourceValue, Type targetType) { var nonNullableTargetType = targetType.GetNonNullableType(); var numericValueIsInRange = NumericValueIsInRangeComparison.For(sourceValue, nonNullableTargetType); if (NonWholeNumberCheckIsNotRequired(sourceValue, nonNullableTargetType)) { return(numericValueIsInRange); } var moduloOneEqualsZero = NumericConversions.GetModuloOneIsZeroCheck(sourceValue); return(Expression.AndAlso(numericValueIsInRange, moduloOneEqualsZero)); }
private static Expression GetNumericRangeCheck(Expression sourceValue) { var nine = NumericConversions.GetConstantValue(9, sourceValue); var sourceGreaterThanNine = Expression.GreaterThan(sourceValue, nine); if (sourceValue.Type.IsUnsignedNumeric()) { return(sourceGreaterThanNine); } var minusNine = NumericConversions.GetConstantValue(-9, sourceValue); var sourceLessThanMinusNine = Expression.LessThan(sourceValue, minusNine); return(Expression.OrElse(sourceGreaterThanNine, sourceLessThanMinusNine)); }