用于枚举的 Delphi RTTI SetValue
如何使用 RTTI 设置枚举字段的值?
即
type
TCPIFileStatus= (fsUnknown, fsProcessed);
TTest = class
FStatus: TCPIFileStatus;
end;
...
var
Data: TTest;
Ctx: TRttiContext;
Status : TCPIFileStatus;
begin
Data := TTest.Create;
Status := fsProcessed;
Ctx.GetType(Data.ClassType).GetField('FStatus').SetValue(Data, Status);
end;
我得到“无效的类类型转换。”
注意:我需要使用 RTTI,因为我在设计时并不总是知道对象类型或字段名称。
How do I use RTTI to set an enumerated field's value ?
I.e.
type
TCPIFileStatus= (fsUnknown, fsProcessed);
TTest = class
FStatus: TCPIFileStatus;
end;
...
var
Data: TTest;
Ctx: TRttiContext;
Status : TCPIFileStatus;
begin
Data := TTest.Create;
Status := fsProcessed;
Ctx.GetType(Data.ClassType).GetField('FStatus').SetValue(Data, Status);
end;
I get "Invalid class typecast."
NB:I need to use RTTI because I will not always know the object type or field name at design time.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您必须将
TValue
传递给SetValue
方法尝试使用以下代码:you must pass a
TValue
to theSetValue
method try using this code :如果您不知道函数的确切枚举类型而是 TypeInfo,则此问题的另一个解决方案是使用 TValue 的 Make 过程。
这是一个示例(来自 XML 配置解析器):
这稍后用于 TRTTIField/TRTTIProperty.SetValue()
希望这对您有帮助。
Another solution to this problem, in the case you don't know the exact enum type on your function but instead it's TypeInfo, is to use TValue's Make procedure.
Here is an example (From an XML config parser):
This is later used for a TRTTIField/TRTTIProperty.SetValue()
Hope this helps you.
使用 TValue.From 泛型方法获取兼容的 TValue 值以传递给 SetValue 方法...
嗯...很难从文字中获得,更好的代码:
Use TValue.From generic method to obtain a compatible TValue value to pass to the SetValue method...
mmm... it's hard to get from words, better code: