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); }