gpt4 book ai didi

delphi - TValue 字符串<--> bool 值来回

转载 作者:行者123 更新时间:2023-12-03 14:58:43 25 4
gpt4 key购买 nike

我正在玩 TValue

我在一个空白项目中编写了这段代码:

uses
RTTI;

procedure TForm1.FormCreate(Sender: TObject);
var
s: string;
b: Boolean;
begin
s := TValue.From<Boolean > (True).ToString;
b := TValue.From<string > (s).AsType<Boolean>;
end;

但是我无法从字符串转换回 bool 值;我在第二行收到无效类型转换异常。

我使用的是 Delphi XE,但 Delphi Xe6 中的结果相同,这让我得出结论:我使用了 TValue 错误。

请问我做错了什么。

最佳答案

虽然你给出Boolean作为您问题中的示例,我假设您确实对枚举类型的全部通用性感兴趣。否则你只需调用 StrToBool .

TValue并非旨在执行您正在尝试的转换。最终,在低层,函数GetEnumValueGetEnumNameSystem.TypInfo单位是执行这些转换的函数。

在现代版本的 Delphi 中,您可以使用 TRttiEnumerationType 将文本转换为枚举类型值:

b := TRttiEnumerationType.GetValue<Boolean>(s);

您可以像这样朝另一个方向移动:

s := TRttiEnumerationType.GetName<Boolean>(b);

这些方法是通过调用 GetEnumValue 来实现的和GetEnumName分别。

旧版本的 Delphi 隐藏 TRttiEnumerationType.GetValueTRttiEnumerationType.GetName作为私有(private)方法。如果您使用这样的 Delphi 版本,那么您应该使用 GetEnumName .

关于delphi - TValue 字符串<--> bool 值来回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27918172/

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