Я немного смущен о PTypeInfo (и TypeInfo в целом) в Delphi - Delphi 10 Seattle, если быть точным.Delphi: разные PTypeInfo для того же типа
Я столкнулся с следующей проблемой:
У нас есть рамки ORM (на основе Spring4D). Теперь я хочу расширить его возможности для отображения: Nullable integer column в поле Nullable в модели. Столбец содержит NULL, 0 или 1. Mapping функция тривиальна:
- нуль-> нулевой (пустой Nullable)
- 0-> ложные
- 1-> правда
Но Я считаю, что это не имеет значения, я работаю над ORM. Ядро проблемы заключается в том, что для передачи значения используется TValue, и некоторые операции литья выполняются до того, как окончательное значение присваивается полю объекта через RTTI. И там я вижу проблему, которую я могу легко воспроизвести:
Механизм отображения предоставляет указатель PTypeInfo для поля. Пример:
class declaration
...
MyBooleanField : Nullable<Boolean>;
И где-то в коде:
LMyBooleanField.GetTypeInfo ... result is PTypeInfo to Nullable<System.Boolean>.
А теперь, если я пишу:
LMyBooleanField.GetTypeInfo = TypeInfo(Nullable<Boolean>)
результат false. И мой последний вопрос: ПОЧЕМУ? Я уверен, что типы равны. Оба они возвращают 'Nullable<System.Boolean>'
как его имя.
Можете ли вы предоставить [mcve], пожалуйста, –
Имеет ли тип, обладающий этим свойством, в том же двоичном файле/проекте, что и код сравнения? Если, например, ваш класс данных находится в MyData.dpk и 'LMyBooleanField.GetTypeInfo = TypeInfo (Nullable)' в MyORM.dpk, то это может быть проблемой. Вот почему у нас есть функции, такие как 'IsNullable' и' GetUnderlyingType' в 'Spring.pas'. –