В основном это чит; -p
Любой struct
(т.е. все, что унаследовано от ValueType
), обрабатывается семантикой типа значения. Но есть преобразование бокса в object
при необходимости; это означает, что если вы приведете struct
к object
, он создаст специальный объект (в управляемой куче), содержащий данные (как клон) из вашего значения *.
Штучная версия относится к справочному типу. Вы можете распаковать это (путем приведения) обратно к struct
версии, которая переворачивает это (копирует данные клонов из объекта в куче в ваше локальное значение).
* = если только это не пустое Nullable<T>
, в которое вставляется null
; аналогично null
распаковывает в пустую Nullable<T>
.