gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 18:26:44 24 4
gpt4 key购买 nike

我有一个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

以下简单测试显示,对于 CompTypeTTestSetOfByte为零。

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);


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

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

关于delphi - RTTI-为什么在某些情况下TTypedData.CompType为零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28969825/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com