gpt4 book ai didi

c# - 如何创建可以返回 double 或小数的通用 C# 方法?

转载 作者:太空狗 更新时间:2023-10-29 21:07:15 24 4
gpt4 key购买 nike

我有这样的方法:

private static double ComputePercentage(ushort level, ushort capacity)
{
double percentage;
if(capacity == 1)
percentage = 1;

// do calculations...
return percentage;
}

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

我试过类似的东西,但我无法让它工作,因为我无法将像“1”这样的数字分配给通用类型。我还尝试在 ushort capacity) 之后使用“where 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指出,这可能最好用两种不同的方法来完成。正如 TreDubZedd 所指出的那样和 TcKs ,获得我想要的功能的最佳方法是使用可以隐式返回 double 或小数的隐式转换。

最佳答案

其实你不需要泛型,需要的是重载。但是,您需要通过 IL 支持但 C# 不支持的返回值类型进行重载。

对于每个返回的值类型,我更喜欢两种方法:

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

替代方案可以是带有隐式转换运算符的自定义类型:

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;
}
}

关于c# - 如何创建可以返回 double 或小数的通用 C# 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2925441/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com