Указание ключевого слова «Где» с числовыми типами - PullRequest
2 голосов
/ 13 декабря 2011

Я не совсем уверен, как решить эту проблему, и моя текущая реализация неуклюжа. В моем классе есть универсальный метод, который применяет числовое значение к свойству 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', это выдает мне ошибку. Я получаю сообщение об ошибке «Невозможно преобразовать тип« Т »в« десятичный »». Есть ли способ указать, используя ключевое слово Where, что передаваемые значения являются числовыми ??

Ответы [ 2 ]

3 голосов
/ 13 декабря 2011

Это невозможно.

Вместо этого вы можете добавить where T : struct, IConvertible и позвонить tKV.Value.ToDecimal(CultureInfo.InvariantCulture).

1 голос
/ 13 декабря 2011

Не встроено:

https://stackoverflow.com/search?q=numeric+generic+C%23

Вы можете попробовать Convert.ToDeciaml(tKV.Value), поскольку он принимает object в качестве параметра.

...