使用数字类型指定“Where”关键字

时间:2011-12-13 14:29:44

标签: c# generics where-clause

我不太清楚如何解决这个问题,而且我目前的实施很笨重。我的类中有一个泛型方法,它将数值应用于组合框的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关键字指定传入的值是数字??

2 个答案:

答案 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作为参数。