Esempio n. 1
0
        private bool ValidCore(object value)
        {
            if (_comparer != null)
            {
                return _comparer.Equals(_valueToCompare, value);
            }

            if (Member.MemberType.IsValueType && _typeOfValueToCompare.IsValueType)
            {
                if (ValueTypeEqualCalculator.Valid(Member.MemberType, value, _typeOfValueToCompare, _valueToCompare))
                    return true;
            }

            return Equals(_valueToCompare, value);
        }
Esempio n. 2
0
        private bool ValidCore(object value, out string message)
        {
            message = null;

            if (Member.MemberType.IsValueType && _typeOfValueToCompare.IsValueType)
            {
                if (ValueTypeEqualCalculator.CompareTo(Member.MemberType, value, _typeOfValueToCompare, _valueToCompare) <= 0)
                {
                    return(true);
                }
            }

            else if (value is IComparable c1 && _valueToCompare is IComparable c2)
            {
                if (c1.CompareTo(c2) <= 0)
                {
                    return(true);
                }
            }

            message = "Neither the given value nor the value being compared can be converted to IComparable.";
            return(false);
        }
        /// <summary>
        /// Impl of valid ops.
        /// </summary>
        /// <param name="value"></param>
        /// <param name="valueToCompare"></param>
        /// <param name="typeOfValueToCompare"></param>
        /// <param name="message"></param>
        /// <returns></returns>
        protected override bool IsValidImpl(object value, object valueToCompare, Type typeOfValueToCompare, out string message)
        {
            message = null;

            if (VerifiableMember.MemberType.IsValueType && typeOfValueToCompare.IsValueType)
            {
                if (ValueTypeEqualCalculator.CompareTo(VerifiableMember.MemberType, value, typeOfValueToCompare, valueToCompare) <= 0)
                {
                    return(true);
                }
            }

            else if (value is IComparable c1 && valueToCompare is IComparable c2)
            {
                if (c1.CompareTo(c2) <= 0)
                {
                    return(true);
                }
            }

            message = "Neither the given value nor the value being compared can be converted to IComparable.";
            return(false);
        }
Esempio n. 4
0
        public override CorrectVerifyVal ValidValue(object value)
        {
            var val = new CorrectVerifyVal {
                NameOfExecutedRule = NAME
            };

            if (_returnFalseDirectly)
            {
                UpdateVal(val, value);
            }

            else if (value is null)
            {
                UpdateVal(val, null);
            }

            else if (value is char c)
            {
                var fromC = Convert.ToChar(_from);
                var toC   = Convert.ToChar(_to);

                if (_options == RangeOptions.OpenInterval)
                {
                    // Open Interval
                    if (c <= fromC || c >= toC)
                    {
                        UpdateVal(val, c);
                    }
                }
                else
                {
                    // Close Interval
                    if (c < fromC || c > toC)
                    {
                        UpdateVal(val, c);
                    }
                }
            }

            else if (Member.MemberType.IsPrimitive && Member.MemberType.IsValueType)
            {
                var d     = Convert.ToDecimal(value);
                var fromD = Convert.ToDecimal(_from);
                var toD   = Convert.ToDecimal(_to);

                if (_options == RangeOptions.OpenInterval)
                {
                    // Open Interval
                    if (d <= fromD || d >= toD)
                    {
                        UpdateVal(val, d);
                    }
                }
                else
                {
                    // Close Interval
                    if (d < fromD || d > toD)
                    {
                        UpdateVal(val, d);
                    }
                }
            }

            else if (value is DateTime || value is DateTimeOffset)
            {
                var t     = ValueTypeEqualCalculator.ToLongTimeTicks(value);
                var fromT = ValueTypeEqualCalculator.ToLongTimeTicks(_from);
                var toT   = ValueTypeEqualCalculator.ToLongTimeTicks(_to);

                if (_options == RangeOptions.OpenInterval)
                {
                    // Open Interval
                    if (t <= fromT || t >= toT)
                    {
                        UpdateVal(val, value);
                    }
                }
                else
                {
                    // Close Interval
                    if (t < fromT || t > toT)
                    {
                        UpdateVal(val, value);
                    }
                }
            }

            else if (value is IComparable comparable)
            {
                if (_options == RangeOptions.OpenInterval)
                {
                    // Open Interval
                    if (comparable.CompareTo(_from) <= 0 || comparable.CompareTo(_to) >= 0)
                    {
                        UpdateVal(val, comparable);
                    }
                }
                else
                {
                    // Close Interval
                    if (comparable.CompareTo(_from) < 0 || comparable.CompareTo(_to) > 0)
                    {
                        UpdateVal(val, comparable);
                    }
                }
            }

            else
            {
                UpdateVal(val, value, "The given value cannot be compared.");
            }

            return(val);
        }
        private bool IsValidImpl(object value, out object currentValue, out string message)
        {
            message      = "";
            currentValue = value;

            if (_returnFalseDirectly)
            {
                return(false);
            }

            else if (value is null)
            {
                currentValue = null;
                return(false);
            }

            else if (value is char c)
            {
                var fromC = Convert.ToChar(_from);
                var toC   = Convert.ToChar(_to);
                currentValue = c;

                if (_options == RangeOptions.OpenInterval)
                {
                    // Open Interval
                    if (c <= fromC || c >= toC)
                    {
                        return(false);
                    }
                }
                else
                {
                    // Close Interval
                    if (c < fromC || c > toC)
                    {
                        return(false);
                    }
                }
            }

            else if (VerifiableMember.MemberType.IsPrimitive && VerifiableMember.MemberType.IsValueType)
            {
                var d     = Convert.ToDecimal(value);
                var fromD = Convert.ToDecimal(_from);
                var toD   = Convert.ToDecimal(_to);

                currentValue = d;
                if (_options == RangeOptions.OpenInterval)
                {
                    // Open Interval
                    if (d <= fromD || d >= toD)
                    {
                        return(false);
                    }
                }
                else
                {
                    // Close Interval
                    if (d < fromD || d > toD)
                    {
                        return(false);
                    }
                }
            }

            else if (value is DateTime || value is DateTimeOffset)
            {
                var t     = ValueTypeEqualCalculator.ToLongTimeTicks(value);
                var fromT = ValueTypeEqualCalculator.ToLongTimeTicks(_from);
                var toT   = ValueTypeEqualCalculator.ToLongTimeTicks(_to);

                if (_options == RangeOptions.OpenInterval)
                {
                    // Open Interval
                    if (t <= fromT || t >= toT)
                    {
                        return(false);
                    }
                }
                else
                {
                    // Close Interval
                    if (t < fromT || t > toT)
                    {
                        return(false);
                    }
                }
            }

            else if (value is IComparable comparable)
            {
                currentValue = comparable;

                if (_options == RangeOptions.OpenInterval)
                {
                    // Open Interval
                    if (comparable.CompareTo(_from) <= 0 || comparable.CompareTo(_to) >= 0)
                    {
                        return(false);
                    }
                }
                else
                {
                    // Close Interval
                    if (comparable.CompareTo(_from) < 0 || comparable.CompareTo(_to) > 0)
                    {
                        return(false);
                    }
                }
            }

            else
            {
                message = "The given value cannot be compared.";

                return(false);
            }

            return(true);
        }