如何创建一个可以返回double或decimal的通用C#方法?

我有这样的方法
private static double ComputePercentage(ushort level,ushort capacity)
{
      double percentage;
      if(capacity == 1)
        percentage = 1;

      // do calculations...
      return percentage;
}

是否有可能使它成为像“类型T”这样的泛型类型,它可以返回十进制或双精度,具体取决于预期的方法类型(或放入函数的类型?)

我试过这样的东西,但是我无法让它工作,因为我不能将类似“1”的数字分配给泛型类型.我也尝试过使用“在哪里T:”之后的短暂容量)但我仍然无法弄明白.

private static T ComputePercentage<T>(ushort level,ushort capacity)
{
      T percentage;
      if(capacity == 1)
        percentage = 1; // error here

      // do calculations...
      return percentage;
}

这甚至可能吗?我不确定,但我认为this post可能暗示我正在尝试做的事情根本不可能.

编辑

感谢所有回复的人,许多好的答案.正如Tomas所指出的,这可能最好用两种不同的方法完成.正如TreDubZeddTcKs所指出的,获得我想要的功能的最好方法是使用隐式转换,它可以隐式返回double或decimal.

解决方法

实际上,您不需要泛型,而是超载.但是,您需要通过IL支持的返回值类型进行重载,但C#不支持.

我为每个return的值类型优先选择两种方法

static double  ComputePercentageDouble  (ushort level,ushort capacity)
static decimal ComputePercentageDecimal (ushort level,ushort capacity)

替代方案可以是具有隐式转换运算符的custome类型:

decimal decimalPercentage = ComputePercentage( 1,2 );
double  doublePercentage  = ComputePercentage( 1,2 );

static DoubleDecimal ComputePercentage( ushort level,ushort capacity ) {
    DoubleDecimal percentage = default( DoubleDecimal );
    if ( capacity == 1 )
        percentage.Number = 1; // error here

    // do calculations...
    return percentage;
}


public struct DoubleDecimal {
    public decimal Number;

    public static implicit operator decimal( DoubleDecimal value ) {
        return value.Number;
    }
    public static implicit operator double( DoubleDecimal value ) {
        return (double)value.Number;
    }
}

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...