我对Delphi中的PTypeInfo(以及一般的TypeInfo)感到有点困惑 - 准确地说是Delphi 10 Seattle。
我遇到了以下问题:
我们有一个ORM框架(基于Spring4D)。现在我想扩展它的映射能力:Nullable整数列到模型中的Nullable字段。该列包含NULL,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>'
作为其名称。
答案 0 :(得分:0)
我认为你有点回答你自己的问题。虽然TypeInfo和PTypeInfo都是指针,但它们不是同一个东西。 PTypeInfo是指向包含TypeInfo类型指针的位置的指针。因此,LMyBooleanField.GetTypeInfo返回指向Nullable&lt; Nullable&lt; Boolean&gt;,而不是指向Nullable的指针&lt;布尔值&gt;本身。