gpt4 book ai didi

delphi - TValue.AsType 与Delphi中的枚举类型

转载 作者:行者123 更新时间:2023-12-03 18:52:33 27 4
gpt4 key购买 nike

用Delphi编写

uses System.Classes;
...
var
A: TAlignment;
Value: TValue;
begin
Value := 0;
A := Value.AsType<TAlignment>();
end;


在AsType处引发EInvalidCast。

有没有一种方法可以使用TValue从整数值转换为任何枚举类型?

这当然是显而易见的答案:

A := TAlignment(Value);


但我希望提供一个也可以与其他类型一起使用的通用函数。

最佳答案

这似乎做到了:

  if (PTypeInfo(TypeInfo(TAlignment))^.Kind = tkEnumeration) and (Value.TypeInfo.Kind = tkInteger ) then
case System.TypInfo.GetTypeData(TypeInfo(TAlignment))^.OrdType of
otUByte, otSByte: PByte(@A)^ := Value.AsInteger;
otUWord, otSWord: PWord(@A)^ := Value.AsInteger;
otULong, otSLong: PInteger(@A)^ := Value.AsInteger;
end
else
A := Value.AsType<TAlignment>();


其中TAlignment在通用函数中也可以是T。

(从TRttiEnumerationType.GetValue复制了想法)

关于delphi - TValue.AsType <T>与Delphi中的枚举类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53959134/

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