记录中的Delphi Stringlist

时间:2011-03-08 13:07:01

标签: delphi record tstringlist

是否可以在记录中添加字符串列表? EG

TImportStats = record
  ATotal:Integer;
  BTotal:String;
  AList:TStringist;
end;

如果我认为我需要在使用记录之前创建它?

4 个答案:

答案 0 :(得分:7)

虽然这是完全合法的,但找到另一种方法可能是谨慎的。当你说:

时,你可以找出问题所在
  

我认为我需要创建它   在使用记录之前

不仅如此,你还需要找到一个消灭它的好时机。如果你忘了这样做,就没有错误,但你的程序会泄漏内存。

如果记录是字符串列表的所有者,那么最好将其包含在类中。这样,字符串列表的构造和销毁将遵循所有Delphi开发人员都熟悉的构造函数/析构函数模式。

如果记录不拥有字符串列表,但只是在字符串列表的生命周期内对它进行引用,那么记录就可以了。但是,如果你这样做,请确保记录的生命周期包含在字符串列表的生命周期内,这样你就不会携带陈旧的引用。

答案 1 :(得分:3)

是的,这应该有效。在创建字符串列表之前,AList将(不可用)。因此,您可以在不创建字符串列表的情况下使用记录的其他元素,但必须在使用之前创建stringlist元素。此外,您还有责任在完成后释放每个字符串列表。

答案 2 :(得分:0)

如果stringlist仅用于TImportStats记录的本地范围, 您可能希望查看Code Central中的StringList value implementation

这可以避免尝试,创建,最终消除开销。

答案 3 :(得分:0)

我知道它可能已经晚了,但解决问题最优雅的方法是创建一个TStringList的子类,其中包含ATotal和BTotal作为其中的两个新元素。然后你可以根据需要简单地创建和销毁它。这个解决方案简洁明了。