Beispiel #1
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);
        }