RTTI - 为什么在某些情况下TTypedData.CompType为零?

时间:2015-03-10 17:04:46

标签: delphi delphi-xe2

我有一个TValue包围一套。 TTypedData.CompType是零。因此,调用TValue.ToString会引发异常,因为System.TypInfo.SetToString假设CompType永远不会为零。

为什么某些集合类型CompType为零?

TTestEnumType = (tstEnum1 = 1, tstEnum2 = 2, tstEnum3 = 3, tstEnum4 = 4, tstEnum5 = 5, tstEnum6 = 6, tstEnum7 = 7);
TTestEnumTypeSet = set of TTestEnumType;
TTestSetOfByte = set of Byte;

上面我们定义了两种类型:TTestEnumTypeSetTTestSetOfByte

以下简单测试表明,CompType的{​​{1}}为零。

TTestSetOfByte

1 个答案:

答案 0 :(得分:4)

具有明确指定的标准的枚举类型没有RTTI。这在documentation

中说明
  

没有特定值的枚举常量有RTTI:

type SomeEnum = (e1, e2, e3);
     

而枚举常量具有特定值,例如   以下,没有RTTI:

type SomeEnum = (e1 = 1, e2 = 2, e3 = 3);