gpt4 book ai didi

delphi - 当我的值是字符串时,如何为非字符串属性调用 TRttiProperty.SetValue?

转载 作者:行者123 更新时间:2023-12-03 15:48:52 25 4
gpt4 key购买 nike

我想在 Delphi 中序列化一个对象,并且我正在使用新的 RTTI。但是当我从存储中加载值时,它们会作为字符串检索,并且 TRttiProperty.SetValue 需要 TValue 作为第二个参数。因此,当我将声明为 double 的属性的值设置为“5.1”或“5”时,会引发异常

我也尝试使用 TValue.From() 方法,但没有成功。

这里有一段代码解释了哪里出了问题。

var P: TRttiProperty;

....

// P now is the property which is declared as a double or integer
P.SetValue(Self, '3'); //<-- this raises an exception.

编辑:问题是如何让它设置不是字符串类型的属性的值,使用字符串数据类型,但包含有效数据。 (比如上面的案例)

最佳答案

是的,您正在尝试将“3”(字符串)分配给数字属性。 RTTI系统不做隐式类型转换。尝试这样的事情:

procedure DeserializeProperty(P: TRttiProperty; s: string);
var
v: TValue;
begin
case p.PropertyType.TypeKind of
tkInteger: v := StrToInt(s);
tkFloat: v := StrToFloat(s);
tkString: v := s;
end;
p.SetValue(self, v);
end;

这显然不是成品,但它应该足以让您开始使用。

关于delphi - 当我的值是字符串时,如何为非字符串属性调用 TRttiProperty.SetValue?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7247857/

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