基本上,我有一个特定的方法,它使用double和int值来计算我想设置的css类。我在不同的地方做同样的事情,但是用int + int代替。
这就产生了这样一个问题:是否有一个好的办法来解决所有问题。
过载本来是一种方法,但我不想写一个过载的所有变化的数字。
因此,我想看看是否有一个特定于数字的接口类型,我可以使用它作为泛型类型约束--但是我没有找到(因为任何东西都可以实现IConvertible?)
int32反编译结果:
#if GENERICS_WORK
public struct Int32 : IComparable, IFormattable, IConvertible
    , IComparable<Int32>, IEquatable<Int32>
/// , IArithmetic<Int32>
#else
public struct Int32 : IComparable, IFormattable, IConvertible
#endif不,没有数字接口。
这就是我想出来的--它工作得很好,但也可以接受对潜在的非数字对象的调用。对于如何使该方法更具限制性,有什么建议吗?
    public static string GetThresholdColorClass(IConvertible desiredThreshold, IConvertible actualProgress)
    {
        var actual = actualProgress.ToDouble(CultureInfo.InvariantCulture);
        var desired = desiredThreshold.ToDouble(CultureInfo.InvariantCulture);
        if (actual >= desired)
            return "green";
        if (actual <= 0)
            return "red";
        return "yellow";
    }发布于 2015-02-19 14:37:57
遗憾的是,这里没有任何东西(例如,请参见Is there a constraint that restricts my generic method to numeric types?)。您不能创建一个需要“数字”作为参数的泛型类。
您可以做的是只创建方法的double变体(有从int到double的隐式转换,double可以包含所有的int值)
从技术上讲,Gravell编写了一些函数来处理泛型类型的数学.请看https://jonskeet.uk/csharp/miscutil/usage/genericoperators.html,但它们有点“黑客”Y :-)
https://stackoverflow.com/questions/28609024
复制相似问题