加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – TValue string < - >布尔来回

发布时间:2020-12-15 04:31:18 所属栏目:大数据 来源:网络整理
导读:我正和TValue一起玩 我在一个空白项目中编写了这段代码: uses RTTI;procedure TForm1.FormCreate(Sender: TObject);var s: string; b: Boolean;begin s := TValue.FromBoolean (True).ToString; b := TValue.Fromstring (s).AsTypeBoolean;end; 但我无法从
我正和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;

但我无法从字符串转换回布尔值;我在第二行得到一个无效的Typecast异常.

我正在使用Delphi XE,但它与Delphi Xe6中的结果相同,这导致我得出结论:我使用的是TValue错误.

那么请问我做错了什么.

解决方法

虽然您在问题中给出了布尔值作为示例,但我将假设您真正对枚举类型的完整通用性感兴趣.否则你只需要调用StrToBool.

TValue不是为了执行您尝试的转换而设计的.最终,在低级别,System.TypInfo单元中的函数GetEnumValue和GetEnumName是执行这些转换的函数.

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

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

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

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

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

较旧版本的Delphi将TRttiEnumerationType.GetValue和TRttiEnumerationType.GetName隐藏为私有方法.如果您使用的是此类版本的Delphi,则应使用GetEnumName.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读