2011-12-13 43 views
2

我不太清楚如何解決這個問題,而我目前的實現是笨重的。我在我的類中有一個泛型方法,將數值應用於組合框的Value屬性。我希望這種方法適用於整數,浮點數,小數點和雙精度。在內部它會轉換成小數。這是目前我的代碼:指定數字類型的'Where'關鍵字

private void UpdateValueFromComboBox<T>(ComboBox tSource, NumericUpDown tDest) 
{ 
    NamedKeyValuePair<String, T> tKV = tSource.SelectedItem as NamedKeyValuePair<String, T>; 
    if (tKV != null) 
    { 
     // Update the Control's value with what was saved 
     tDest.Value = Decimal.Parse(tKV.Value.ToString()); 
    } 
} 

我想要做的就是擺脫了toString()和parse()調用。基本上,我想分配給如下:

tDest.Value = (Decimal) tKV.Value; 

但因爲C#不知道什麼是「T」是或將是,它給了我一個錯誤。我得到一個錯誤,「無法將類型'T'轉換爲'小數'」。有沒有一種方法可以使用Where關鍵字來指定傳入的值是數字?

+0

tDest.Value =(十進制)(對象)tKV.Value – dkackman

+0

@dkackman:如果它是任何其他數字類型,則不起作用。如果你這樣做,你也可以使它不是通用的。 – SLaks

回答

3

這是不可能的。您可以添加where T : struct, IConvertible並致電tKV.Value.ToDecimal(CultureInfo.InvariantCulture)