Delphi:相同类型的不同PTypeInfo

时间:2016-02-25 15:50:55

标签: delphi rtti spring4d tvalue

我对Delphi中的PTypeInfo(以及一般的TypeInfo)感到有点困惑 - 准确地说是Delphi 10 Seattle。

我遇到了以下问题:

我们有一个ORM框架(基于Spring4D)。现在我想扩展它的映射能力:Nullable整数列到模型中的Nullable字段。该列包含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>'作为其名称。

1 个答案:

答案 0 :(得分:0)

我认为你有点回答你自己的问题。虽然TypeInfo和PTypeInfo都是指针,但它们不是同一个东西。 PTypeInfo是指向包含TypeInfo类型指针的位置的指针。因此,LMyBooleanField.GetTypeInfo返回指向Nullable&lt; Nullable&lt; Boolean&gt;,而不是指向Nullable的指针&lt;布尔值&gt;本身。

相关问题