用于枚举的Delphi RTTI SetValue
发布时间:2020-12-15 09:19:24 所属栏目:大数据 来源:网络整理
导读:如何使用RTTI设置枚举字段的值? 即 type TCPIFileStatus= (fsUnknown,fsProcessed); TTest = class FStatus: TCPIFileStatus; end; ... var Data: TTest; Ctx: TRttiContext; Status : TCPIFileStatus; begin Data := TTest.Create; Status := fsProcessed;
如何使用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; 我得到“无效的类类型转换”. 解决方法
您必须将
TValue 传递给
SetValue 方法尝试使用此代码:
{$APPTYPE CONSOLE} uses Rtti,SysUtils; type TCPIFileStatus= (fsUnknown,fsProcessed); TTest = class FStatus: TCPIFileStatus; end; var Data : TTest; Ctx : TRttiContext; Status : TCPIFileStatus; v : TValue; begin try Data := TTest.Create; try Status := fsProcessed; v:= v.From(status); Ctx.GetType(Data.ClassType).GetField('FStatus').SetValue(Data,v); // do your stuff finally Data.Free; end; except on E: Exception do Writeln(E.ClassName,': ',E.Message); end; end. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |