c# - 努力想出一个通用的 C# 方法来比较不同类型的数字对象

标签 c# generics infragistics

我在表单上有一个 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/

相关文章:

c# - 继承自动实现的属性,在派生类中只需要 getter

javascript - 如何制作水平图例

c# - 如何使用 Linq 中的通用接口(interface)类型进行过滤?

c# - 通过 WCF 服务传递指定的泛型类型

c# - 具有不同 XAxis (DateTime) 区域的 Infragistics 多个系列

c# - XamDataGrid 列位置索引 : Field. 索引或 Field.ActualPosition.Column

c# - 将所有子域添加到 CORS azure 功能

c# - 为什么不能将 Dictionary<T1, List<T2>> 转换为 Dictionary<T1, IEnumerable<T2>>?

c# - 如何反序列化列表对象中的响应 JSON?

generics - "Missing parameter type"在采用函数参数的重载泛型方法中