TList 容器中的record类型值怎么修改

xhfbx 2017-10-30 11:53:21
各位高手,第一次用TList ,现在我想修改TList 容器中的record的值,要怎么才能改啊?谢谢了!


uses System.Generics.Collections;

type
TTest = record
name : string;
age : Integer;
procedure setage(vage : Integer);
end;

var myTest: TList<TTest>;

procedure TForm1.FormCreate(Sender: TObject);
var
e : TTest;
begin
e.name := 'AAA';
e.age := 100 ;
myTest := TList<TTest>.Create;
myTest.Add(e);
e.age := 50;
memo1.Lines.Add(IntToStr(myTest.Items[0].age));
myTest.Items[0].age := 0; //这里报错 提示不能这样写
memo1.Lines.Add(IntToStr(myTest.Items[0].age));
end;
...全文
331 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xhfbx 2017-10-30
  • 打赏
  • 举报
回复
非常谢谢!试了下,两位的都可行, DelphiGuy 回复早些所以多给点分了。
看那山瞧那水 2017-10-30
  • 打赏
  • 举报
回复
delphi里的record是值类型,经常遇到LZ的问题,比如类的属性是record的时候,通过属性访问也是不能对record里的某个项单独赋值。 我一般是用个局部变量, var tmp: TTest; ...... tmp := myTest[0]; tmp.age := 10; myTest[0] := tmp; 这样赋值。 感觉别扭啊,record类型如果不是直接操作变量本身,只能是整体赋值操作。
  • 打赏
  • 举报
回复
因为myTest.Items[0](或者简写myTest[0]),返回的是值类型(临时拷贝), 所以不能赋值。 可以: myTest.List[0].age := 50;

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧