我对 Delphi 中的 PTypeInfo(以及一般的 TypeInfo)有点困惑——确切地说是 Delphi 10 Seattle。
我遇到了以下问题:
我们有一个 ORM 框架(基于 Spring4D)。现在我想扩展它的映射能力:Nullable integer column to a Nullable field in model. 该列包含 NULL、0 或 1。映射函数很简单:
- NULL->null (空的 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>)
结果是假的。我的终极问题是为什么?我确信类型是平等的。'Nullable<System.Boolean>'
他们都以它的名字返回。