加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

用于枚举的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;

我得到“无效的类类型转换”.
注意:我需要使用RTTI,因为在设计时我不会总是知道对象类型或字段名称.

解决方法

您必须将 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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读