是否有任何Delphi版本可以发出包含tkUnknown的RTTI?

Jer*_*ers 7 delphi rtti

只是为了确保我没有忽略一个奇怪的边缘情况,因为我发现了一个产生它的情况,但我想确保:

是否有任何Delphi版本可以发出包含类型tkUnknownTTypeKind的 RTTI ?

如果是这样:

  • 任何文件参考?
  • 什么类型会产生它?

在当前的Delphi XE5 RTL,我能找到处理的唯一地方tkUnknownTValue,但我还没有发现在RTL,设置了一个代码路径TValue包含所属类别tkUnknown作为.

Ste*_*nke 8

答案是不.其他任何东西都是编译器中的错误.

tkUnknown表明没有可用的类型信息可能是不连续的枚举和枚举的情况,这些枚举和枚举不是从零开始(如Barry 在这里所解释的)和一些类型来自很久以前(如Real48).

TValue.Kind当它TValue.IsEmpty为真时它也会返回.(因为它之前的XE2 afaik也可以返回True,如果它保持一个nil的引用类型是一个bug).

当您检索RTTI以查找不包含类型信息的内容时(如字段,属性或没有类型信息的类型的参数),您的RTTI信息不完整.TRttiField.FieldType并且TRttiProperty.PropertyType在这些情况下返回nil 并且返回的数组TRttiMethod.GetParameters不完整.

虽然可以TValue.Make<T>使用没有类型信息的类型进行调用,但是由于其TypeInfo将为零,因此无法对此进行调用.编译器显然可以在E2134附近工作并将nil传递给TValue.Make.因此TValue.Kind会说tkUnknown.