2011-12-13 44 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)