我目前正在尝试编写一种扩展方法来计算出允许的十进制方差。在编写它的时候,我想我会将其扩展为通用扩展名,并限制为十进制,浮点数和双精度数。
目前,我不知道如何(或是否有可能)将泛型限制为值类型。
public static bool WithinVariance(this decimal source, decimal allowedVariance, decimal comparisonValue)
=> WithinVariance<decimal>(source, allowedVariance, comparisonValue);
public static bool WithinVariance<T>(T source, T allowedVariance, T comparisonValue)
// where T : decimal
// where T : double
// where T : float
{
var allowedDifference = (source / 100) * allowedVariance;
var difference = source - comparisonValue;
return Math.Abs(difference) <= allowedDifference;
}
上面的代码不起作用,它只是用来显示我采用的方法。本来我只是想使用一种方法,但是我改成了上面的方法,试图破解它。也尝试不使用where t过滤器来限制扩展方法(请参见注释行)
有人知道这是否可行吗?