TValue string<-->布尔来回
TValue string<-->Boolean back and forth
我正在玩 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;
但我无法从字符串转换回布尔值;我在第二行收到一个 Invalid Typecast 异常。
我正在使用 Delphi XE,但它在 Delphi Xe6 中的结果相同,这让我得出结论:我使用的 TValue 是错误的。
请问我做错了什么。
虽然您在问题中以 Boolean
为例,但我假设您真的对枚举类型的全部通用性感兴趣。否则你只需调用 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
.
TValue
并不意味着转换不兼容赋值的类型。它旨在在 RTTI 中传输值时保存值,并 遵守 Delphi.
的分配规则
只有 ToString
可以以某种字符串表示形式输出值,但是当使用 TValue
.
时,您不能简单地将字符串分配给的类型也会失败
TValue
不是 Variant
。
如果要将字符串转换为布尔值并返回,请使用 StrToBool
和 BoolToStr
。
我正在玩 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;
但我无法从字符串转换回布尔值;我在第二行收到一个 Invalid Typecast 异常。
我正在使用 Delphi XE,但它在 Delphi Xe6 中的结果相同,这让我得出结论:我使用的 TValue 是错误的。
请问我做错了什么。
虽然您在问题中以 Boolean
为例,但我假设您真的对枚举类型的全部通用性感兴趣。否则你只需调用 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
.
TValue
并不意味着转换不兼容赋值的类型。它旨在在 RTTI 中传输值时保存值,并 遵守 Delphi.
只有 ToString
可以以某种字符串表示形式输出值,但是当使用 TValue
.
TValue
不是 Variant
。
如果要将字符串转换为布尔值并返回,请使用 StrToBool
和 BoolToStr
。