如何使用TStringList的AddObject方法添加整数对象?

12

使用 Delphi 7:

  • 如何使用 AddObject 将整数添加到字符串列表项的对象部分?
  • 如何从字符串列表项的对象属性中检索整数?
  • 完成后如何释放所有对象和列表?
1个回答

43

问题: 如何使用AddObject将整数添加到stringlist项的对象部分中?

回答: 只需将整数值强制转换为TObject即可。

List.AddObject('A string',TObject(1));

问:如何从字符串列表项的对象属性中检索出整数?

答:将对象值转换为整数。

AValue := Integer(List.Objects[i]);

Q: 如何在完成后释放所有对象和列表?

A: 你不需要释放对象列表,因为你没有分配内存。所以只需调用 TStringListFree 过程。

尝试这个示例应用程序:

{$APPTYPE CONSOLE}

uses
  Classes,
  SysUtils;


Var
  List : TStringList;
  i    : Integer;
begin
  try
    List:=TStringList.Create;
    try
      //assign the string and some integer values
      List.AddObject('A string',TObject(1));
      List.AddObject('Another string',TObject(100));
      List.AddObject('And another string',TObject(300));

      //Get the integer values back   

       for i:=0 to List.Count - 1 do
         Writeln(Integer(List.Objects[i]));

    finally
      //Free the list  
      List.free;
    end;
  except
    on E:Exception do
      Writeln(E.Classname, ': ', E.Message);
  end;

  Readln;
end.

1
你比我快,我正准备写答案,但我会点赞你的回答。最后提醒一下楼主,你不需要显式释放任何对象,除了列表外,因为TStringList会释放其内部指针列表,并且你没有创建任何对象,只有存储在该列表中的整数。这就是RRUZ所展示的,只释放TStringList。 - Richard A
@RRUZ - +1 哇!我觉得你刚刚解决了一个我一直在努力解决的重大问题。我喜欢使用ID/Value对进行数据库查找值。所以,如果我正确理解上面的内容,我可以在下拉列表中显示List.Strings[i](值部分),并使用相关的整数(List.Objects[i])作为数据库中的外键ID。 - Michael Riley - AKA Gunny
1
@IElite,我曾经使用过类似的技巧来存储浮点数列表,其中精度和动态范围并不重要(Delphi的single类型是4个字节,可以强制转换为指针)。如果没有字符串,只想存储整数/浮点数,也可以使用TList。 - rossmcm
非常棒的回答!谢谢 RRUZ。 - Edwin Yip

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接