Магия с Nullable-типами в .NET
Nullable<T>
- классное нововведение (или, с учетом времени, - старовведение) CLR 2.0 как минимум в контексте работы с базой данных. Не хочу приводить список проблем, которые решают Nullable-типы, речь не о них. Хочу рассказать, как это работает.
Пример 1.
i = null;
превращается в i = new Nullable<Int32>();
Пример 2.
Int32
. Стоп! А должен быть Nullable`Int32
, ведь i
имеет тип Nullable<Int32>
! А имеет ли?... Условный IL-код:
i
имеет тип Nullable<Int32>
. Теперь интересно, почему у o
тип Int32
? Ответ - в исходниках CLR (Rotor Shared Source), файл object.cpp, функции Nullable::Box
и Nullable::UnBox
Nullable<T>
выполняется CLR специальным образом - box(Value), если значение есть, и box(null), если значения нет. В результате тип боксированного значения - T, если значение было задано, а если не было - то выяснить его динамический тип невозможно.
1 коммент.:
автор жжот
Отправить комментарий