首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使方法接受不同类型的多个数值参数

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

Stack Overflow用户
提问于 2015-02-19 14:35:48
回答 1查看 563关注 0票数 0

基本上,我有一个特定的方法,它使用double和int值来计算我想设置的css类。我在不同的地方做同样的事情,但是用int + int代替。

这就产生了这样一个问题:是否有一个好的办法来解决所有问题。

过载本来是一种方法,但我不想写一个过载的所有变化的数字。

因此,我想看看是否有一个特定于数字的接口类型,我可以使用它作为泛型类型约束--但是我没有找到(因为任何东西都可以实现IConvertible?)

int32反编译结果:

代码语言:javascript
运行
复制
#if GENERICS_WORK
public struct Int32 : IComparable, IFormattable, IConvertible
    , IComparable<Int32>, IEquatable<Int32>
/// , IArithmetic<Int32>
#else
public struct Int32 : IComparable, IFormattable, IConvertible
#endif

不,没有数字接口。

这就是我想出来的--它工作得很好,但也可以接受对潜在的非数字对象的调用。对于如何使该方法更具限制性,有什么建议吗?

代码语言:javascript
运行
复制
    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";
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-19 14:37:57

遗憾的是,这里没有任何东西(例如,请参见Is there a constraint that restricts my generic method to numeric types?)。您不能创建一个需要“数字”作为参数的泛型类。

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

从技术上讲,Gravell编写了一些函数来处理泛型类型的数学.请看https://jonskeet.uk/csharp/miscutil/usage/genericoperators.html,但它们有点“黑客”Y :-)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28609024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档