作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个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;
TTestEnumTypeSet
和
TTestSetOfByte
。
CompType
,
TTestSetOfByte
为零。
procedure TTestUtlRttiComparer.TestSetToString;
var
TypeData1: TTypeData;
TypeData2: TTypeData;
TypeInfo1: TTypeInfo;
TypeInfo2: TTypeInfo;
begin
TypeInfo1 := PTypeInfo(TypeInfo(TTestSetOfByte))^;
TypeInfo2 := PTypeInfo(TypeInfo(TTestEnumTypeSet))^;
CheckTrue(TypeInfo1.Kind = tkSet);
CheckTrue(TypeInfo2.Kind = tkSet);
TypeData1 := GetTypeData(@TypeInfo1)^;
TypeData2 := GetTypeData(@TypeInfo2)^;
CheckTrue(Assigned(TypeData1.CompType));
CheckTrue(Assigned(TypeData2.CompType), 'TypeData2.CompType is NULL!!!! WHY??????'); // this FAILS!!!
end;
最佳答案
具有明确分配的常规的枚举类型不具有RTTI。这在documentation中说明:
没有特定值的枚举常量具有RTTI:
type SomeEnum = (e1, e2, e3);
type SomeEnum = (e1 = 1, e2 = 2, e3 = 3);
关于delphi - RTTI-为什么在某些情况下TTypedData.CompType为零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28969825/
我正在使用库 HDF5 以二进制形式保存。 我想要某种用户定义的“全局”数据类型,我在开始时对其进行初始化,然后在需要时使用它。 例如,我想为“Vector”定义一个复合类型(它只是一个结构,其组件是
我是一名优秀的程序员,十分优秀!