Jen*_*olt 6 delphi rtti delphi-xe
我正和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;
Run Code Online (Sandbox Code Playgroud)
但我无法从字符串转换回布尔值; 我在第二行得到一个无效的Typecast异常.
我正在使用Delphi XE,但它与Delphi Xe6中的结果相同,这导致我得出结论:我使用的是TValue错误.
那么请问我做错了什么.
尽管您Boolean在问题中给出了示例,但我将假设您对枚举类型的全部通用性非常感兴趣。否则你只会调用StrToBool.
TValue并非旨在执行您正在尝试的转换。最终,在低电平,则所述功能GetEnumValue和GetEnumName在System.TypInfo单元是执行这些转换的功能。
在现代版本的 Delphi 中,您可以使用TRttiEnumerationType将文本转换为枚举类型值:
b := TRttiEnumerationType.GetValue<Boolean>(s);
Run Code Online (Sandbox Code Playgroud)
您可以像这样朝另一个方向移动:
s := TRttiEnumerationType.GetName<Boolean>(b);
Run Code Online (Sandbox Code Playgroud)
这些方法分别通过调用GetEnumValue和来实现GetEnumName。
旧版本的 Delphi 隐藏TRttiEnumerationType.GetValue和TRttiEnumerationType.GetName作为私有方法。如果您使用的是这样的 Delphi 版本,那么您应该使用GetEnumName.
TValue并不意味着转换不兼容的类型.它被设计为在RTTI中传输它们时保持值,并遵守Delphi的赋值规则.
只能ToString在某些字符串表示中输出值,但是在执行此操作时,您不能简单地指定字符串的类型也会失败TValue.
TValue不是Variant.
如果要将字符串转换为布尔值,然后使用StrToBool和BoolToStr.
| 归档时间: |
|
| 查看次数: |
1798 次 |
| 最近记录: |