У меня есть элемент управления Infragistics UltraNumericEditor (версия 5.3, довольно старая) в форме.
Если для поля .Value задать значение, меньшее, чем .MinValue, или значение, большее, чем .MaxValue, я получу исключение System.Exception со следующим сообщением:
Для свойства «Значение» нельзя установить значение, выходящее за пределы диапазона, определяемого свойствами «MinValue» и «MaxValue»
Подписи соответствующих полей в UltraNumericEditor следующие:
public object MinValue { get; set; }
public object MaxValue { get; set; }
public object Value { get; set; }
Это может произойти много сотен раз через нашу кодовую базу, поэтому вместо того, чтобы проверять MinValue и MaxValue против значения, которое мы пытаемся установить каждый раз , я думал, что подкласс управления и поставьте там чек:
public class OurNumericEditor : Infragistics.Win.UltraWinEditors.UltraNumericEditor
{
public object Value
{
get
{
return base.Value;
}
set
{
// make sure what we're setting isn't outside the min or max
// if it is, set value to the min or max instead
double min = (double)base.MinValue;
double max = (double)base.MaxValue;
double attempted = (double)value;
if (attempted > max)
base.Value = max;
else if (attempted < min)
base.Value = min;
else
base.Value = value;
}
}
}
Ясно, что это прекрасно работает, когда тип значения, MinValue и MaxValue может быть приведен к удвоению, но я ожидал бы InvalidCastException, когда это невозможно.
Теперь у меня может быть просто блондин, но я думаю, что можно написать метод, который использует дженерики для сравнения, но я изо всех сил пытаюсь представить, как это может выглядеть.
Любые идеи или вклад вообще?
Спасибо
Том