我不太清楚如何解决这个问题,而且我目前的实施很笨重。我的类中有一个泛型方法,它将数值应用于组合框的Value属性。我希望这个方法适用于整数,浮点数,小数和双精度数。在内部,它将转换为小数。这是我目前的代码:
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 :(得分:3)
这是不可能的。
相反,您可以添加where T : struct, IConvertible
并致电tKV.Value.ToDecimal(CultureInfo.InvariantCulture)
。
答案 1 :(得分:1)
未内置:
https://stackoverflow.com/search?q=numeric+generic+C%23
您可以尝试Convert.ToDeciaml(tKV.Value)
,因为它需要object
作为参数。