RttiType.TypeKind和RttiType.Name有什么区别?

时间:2013-06-03 23:21:52

标签: delphi

之间的语义差异是什么:

RttiType.TypeKind和RttiType.Name?

我问,因为原则上不能从名称中推断出TypeKind吗?

2 个答案:

答案 0 :(得分:3)

TypeKind的{​​{1}}和Name属性完全不同。

  • TRttiType告诉您您的类型。这可以是TypeKind枚举类型中定义的23个不同选项之一。
  • TTypeKind告诉您您的类型。这是一个字符串,可以有无限数量的值。

不同类型(通常)具有不同的名称,但可能具有相同的Name。例如,请考虑这个简单的演示。

TypeKind

输出结果为:

TObject
TInterfacedObject

因此,您无法从类型名称推断类型 kind ,因为种类和名称完全不同。

答案 1 :(得分:2)

RTTIType.Name是一个字符串。 RTTI.TypeKind是枚举类型,适合在循环或case语句中使用。它们根本就不一样,而且在实际使用中,“从字符串中推断”根本不是一回事。写作更清晰,简洁,高效

case TypeKind of
  tkInteger, tkInt64: DoSomething;
  tkEnumeration: DoThisInstead;
...

比写

if (Name = 'tkInteger') or (Name = 'tkInt64') then
  DoSomething
else if (Name = 'tkEnumeration') then
  DoThisInstead
...