C# 使方法接受多个不同类型的数值参数

C# 使方法接受多个不同类型的数值参数,c#,C#,基本上,我有一个特定的方法,它使用double和int值来计算我想要设置的css类。我在另一个地方做同样的事情,但是用int+int代替 这就产生了一个问题:是否有一个好的方法来解决所有问题 重载本来是一种方法,但我不想为所有的数字变体编写重载 所以我想我应该看看是否有一些特定的接口类型可以用作泛型类型约束-但我没有找到一个(因为任何东西都可以实现IConvertible?) int32反编译的结果: #if GENERICS_WORK public struct Int32 : ICompar

基本上,我有一个特定的方法,它使用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
#如果泛型有效
公共结构Int32:IComparable、IFormattable、IConvertible
,i可比,i可比
///,Irithmetic
#否则
公共结构Int32:IComparable、IFormattable、IConvertible
#恩迪夫
不,没有数字接口

这就是我想到的——它工作正常,但也接受对潜在非数字对象的调用。关于如何使该方法更具限制性,有什么建议吗

    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";
    }
公共静态字符串GetThresholdColorClass(IConvertible desiredThreshold,IConvertible actualProgress)
{
var actual=实际进程.ToDouble(CultureInfo.InvariantCulture);
var desired=desiredThreshold.ToDouble(CultureInfo.InvariantCulture);
如果(实际>=需要)
返回“绿色”;

如果(实际很遗憾,没有任何东西(例如,请参见)。您不能创建需要“数字”作为参数的泛型类

您可以只创建方法的
double
变体(存在从
int
double
的隐式转换,
double
可以包含所有
int
值)


从技术上讲,Gravell编写了一些函数来处理泛型类型的数学问题……请参阅,但它们有点“黑客”ey:-)

meh。遗憾的是没有内置的方式。但是隐式铸造在这里也起到了作用。也谢谢你提到其他问题。有点像我的问题。在搜索时没有找到它-稍微不同的词。现在我必须查找T4解决方案,因为它看起来也很有趣。哈哈。谢谢你!@和reasMüller如果你想测试通用的“黑客”,这里有几行我几年前写的代码。你可以很容易地将它们重新用于其他运营商。