2010-11-19 82 views
0

我實現下一個功能:MiscUtils運營商 - 乘以標

private bool CheckRelativeIncrease(T pVal1, T pVal2, out T pFluctuation, int x) 

,我比較,如果pVal2增加了一個「X%」過pVal1更多。我正在使用泛型來使該函數與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」給我一個錯誤,因爲「因素」已經不是同一類型爲「pVal2」。

任何想法?

由於提前, 西爾維婭

回答

1

我不認爲我們目前支持混合類型的運算符 - 但是如果你在Operator<T>看看代碼應該很容易適應它。隨時給我一個補丁:)

基本上你需要一個Operator<T1, T2, TResult>看起來像Operator<TValue, TResult>除了它使用不同的輸入和輸出類型。您需要指定期望的結果類型,當然 - 如果您乘以T乘以int,您會希望結果爲int,T還是別的?

如果您正在使用C#4和.NET 4,你可能要考慮使用,而不是動態類型...

+0

嗨,thaks爲快速的答案。 – Silvia 2010-11-19 15:19:08

+0

Thaks爲快速回答。我會嘗試修改代碼,好吧。在這種情況下,預期的結果是T.我在哪裏可以下載源代碼?我只找到一個老版本的MiscUtils,它沒有運營商... – Silvia 2010-11-19 15:21:00

+0

@Silvia:最新版本總是在http://pobox.com/~skeet/csharp/miscutil – 2010-11-19 15:45:48

0

還有兩型乘法操作,您可以使用,根據this documentation

public static TArg1 MultiplyAlternative(TArg1 value1, TArg2 value2) 
0

編寫另一個函數來將一個類型轉換爲另一個類型。在代碼中對該函數進行嵌套調用,並解決問題。