Задание значения в коробке
Почему ящик int
, который был помещен в бокс, не может быть напрямую добавлен к double
?
object o = 12;
double d = (double)o;
Это вызывает недопустимое исключение лита. Вместо этого кажется, что сначала он должен быть отброшен как int
, а затем на double
.
object o = 12;
double d = (double)(int)o;
Я уверен, что простой ответ "потому что это работает бокс", но я надеюсь, что кто-то может пролить немного света здесь.
Ответы
Ответ 1
Проверьте этот вопрос ранее: Почему я получаю InvalidCastException?
Операции Unboxing выполняются только в том случае, если целевой тип точно совпадает с исходным типом, который был помещен в бокс, поэтому генерируется исключение. Эта ссылка, которую подробно объяснил Джон Лейдегрен.
Ответ 2
Если во время компиляции вы не знаете оригинальный тип:
object o = 12;
double d = (double)Convert.ChangeType(o, typeof(double));