Esempio n. 1
0
        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));
        }
Esempio n. 2
0
        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));
        }
Esempio n. 3
0
        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));
        }