MiscUtils运算符 - 乘以标量

时间:2010-11-19 14:23:50

标签: c# generics

我正在实施下一个功能:

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'的类型不同。

有什么想法吗?

提前致谢, 西尔维娅

3 个答案:

答案 0 :(得分:1)

我不相信我们目前支持混合类型的运算符 - 但如果你看一下Operator<T>中的代码,它应该很容易适应它。随意发给我一个补丁:)

基本上你需要Operator<T1, T2, TResult>看起来像Operator<TValue, TResult>,除了它为不同的输入和输出使用不同的类型。您需要指定预期的结果类型,当然 - 如果您将T乘以int,您希望结果为int,{{1}或其他什么?

如果您使用的是C#4和.NET 4,您可能需要考虑使用动态类型......

答案 1 :(得分:0)

根据this documentation

,您还可以使用两种类型的乘法运算
public static TArg1 MultiplyAlternative(TArg1 value1, TArg2 value2)

答案 2 :(得分:0)

编写另一个函数以将一种类型转换为另一种类型。在代码中对该函数进行嵌套调用并解决问题。