我正在实施下一个功能:
private bool CheckRelativeIncrease(T pVal1, T pVal2, out T pFluctuation, int x)
我比较pVal2是否比pVal1增加了超过“x%”。我正在使用Generics来使函数与int一起工作,简短...我正在使用MiscUtils.Operator但问题是我不能混合已知和未知类型。以下代码不起作用:
bool increased = false;
int comparer = Comparer.Default.Compare(pVal1, pVal2);
pFluctuation = Operator<T>.Zero;
if (comparer > 0) {
int factor = (int)(1 + (x / 100));
pFluctuation = Operator.Multiply(factor, pVal2);
comparer = Comparer.Default.Compare(pVal1, pFluctuation);
if (comparer >= 0)
increased = true;
}
return increased;
“Operator.Multiply”给我一个错误,因为'factor'与'pVal2'的类型不同。
有什么想法吗?
提前致谢, 西尔维娅
答案 0 :(得分:1)
我不相信我们目前支持混合类型的运算符 - 但如果你看一下Operator<T>
中的代码,它应该很容易适应它。随意发给我一个补丁:)
基本上你需要Operator<T1, T2, TResult>
看起来像Operator<TValue, TResult>
,除了它为不同的输入和输出使用不同的类型。您需要指定预期的结果类型,当然 - 如果您将T
乘以int
,您希望结果为int
,{{1}或其他什么?
如果您使用的是C#4和.NET 4,您可能需要考虑使用动态类型......
答案 1 :(得分:0)
public static TArg1 MultiplyAlternative(TArg1 value1, TArg2 value2)
答案 2 :(得分:0)
编写另一个函数以将一种类型转换为另一种类型。在代码中对该函数进行嵌套调用并解决问题。