我在表单上有一个 Infragistics UltraNumericEditor(5.3 版,很旧)控件。
如果我将 .Value 字段设置为小于 .MinValue 或大于 .MaxValue 的值,则会抛出 System.Exception 并显示以下消息:
The 'Value' property cannot be set to a value that is outside the range determined by the 'MinValue' and 'MaxValue' properties
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 可以转换为 double 时,这很有效,但我希望在不可能时出现 InvalidCastException。
现在我可能只是有一个金发碧眼的时刻,但我认为应该可以编写一个使用泛型进行比较的方法,但我正在努力想象它可能是什么样子。
有任何想法或意见吗?
谢谢
汤姆
最佳答案
您可以简单地将所有内容转换为 IComparable并使用该界面进行比较。
关于c# - 努力想出一个通用的 C# 方法来比较不同类型的数字对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/802024/