HELP!怎么通过字符串去得到一个自定义结构某属性的值?(300分)

  • 主题发起人 主题发起人 jlutt-sadan
  • 开始时间 开始时间
J

jlutt-sadan

Unregistered / Unconfirmed
GUEST, unregistred user!
自定义一个结构
TTestRec=record
Var1: string[30];
Var2: string[30];
end;

我现在想写一个函数GetRecVar(const ARec: TTestRec;AStr: string): string;来得到属性的值
比如GetRecVar(FRec,"Var1")得到FRec.Var1的值?
 
function GetRecVar(const ARec: TTestRec;AStr: string): string;
begin
if AStr ='var1' then result := arec.var1 ;
end ;
 
to mstar:
我开始也是这样的写法,不过俺结构里面属性贼多,导致if..then一大堆,
不知道有没有好的方法,让结构通过字符串找到该属性的地址?
 
实际上是‘字符串->变量’的宏替换问题(在foxpro中支持),关注!
‘字符串->组件’可以使用FindComponet()的方法实现。

对于你这种情况,mstar给出的也算是一种解决方法。因为你既然自定义结构,并提供字符串AStr寻找,结构的成员是比较容易确定的。

继续关注!
 
学习中,为什么要在参数中加const呢?
 
你在这里不是提过了吗 其实 CLASS 的内存使用也不比 STRUCT 多多少
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2558586
如果一定要这样做的话 可以考虑写个代码自动生成(专家)的东西来帮助你
 
下面这种办法可以存贮结构到数据库,或通讯上用。
楼主的要求,用这种方法可以实现。
如果频繁这样取值,可以直接把TStringList做到类中。
function GetRecVar(const ARec: TTestRec;AStr: string): string;
var
s: TStringList;
begin
s := TStringList.Create;
try
s.Values['Var1'] := ARec.Var1;
s.Values['Var2'] := ARec.Var2;
...
s.Values['VarN'] := ARec.VarN;
Result := s.Values[AStr];
finally
s.Free;
end;
end;
 
除非你定义成类。
 
在参数中加const可以省內存的啊...
 
如果属性都是同一类型的话,应该可以定义成数组
 
多人接受答案了。
 
后退
顶部