之间的语义差异是什么:
RttiType.TypeKind和RttiType.Name?
我问,因为原则上不能从名称中推断出TypeKind吗?
答案 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
...