Почему это работает:
decimal dec = new Decimal(33);
double dd = (double) dec;
Console.WriteLine(dd);
Но не это:
decimal dec = new Decimal(33);
object o = (object)dec;
double dd = (double) o;
Console.WriteLine(dd);
Второй пример выдает:
System.InvalidCastException: указанное приведение недопустимо.
Этот вопрос исходит из ситуации, когда у меня есть общий метод
public T GetValue(string q)
Это получает значения из источника данных. Типы этих значений неизвестны, но метод предполагает, что он может привести значение к T. Иногда значение будет object{decimal}, а T будет двойным, и в этом случае будет выдано исключение InvalidCastException. Но в принципе это не должно быть проблемой, поскольку значение представляет собой десятичное число (хотя и помещенное в коробку с объектом), которое можно преобразовать в двойное.
Как мне справиться с этим в целом?