TStringList count returns 负数

TStringList count returns negative number

我想使用计数 属性 来计算 TStringList 中项目(字符串)的数量。 TStringList.Count returns 我“-307586000”为什么?

这是我在 Lazarus 中的代码:

procedure Test;
  var
    list: TStringList;
    vrai: boolean;
    nCol, i: integer;

begin
 vrai := true;
 list.Create;
 nCol := 5;
 for i := 0 to nCol-1 do
   if vrai then
     begin
       list.Add(intToStr(i));
       showmessage(IntToStr(list.Count));
     end;
end;

谢谢大家。

您需要将 list.Create; 更改为 list := TStringList.Create; 当您通过对象变量而不是 class 类型调用构造函数时,构造函数将像普通方法一样被调用。您实际上并没有创建任何 TStringList 对象,因此调用 list.Add()list.Count 是未定义的行为。你很幸运你的代码没有简单地崩溃。

此外,当您使用完 list 时,不要忘记调用 list.Free;

试试这个:

procedure Test;
var
  list: TStringList;
  vrai: boolean;
  nCol, i: integer;
begin
  vrai := true;
  list := TStringList.Create;
  try
    nCol := 5;
    for i := 0 to nCol-1 do
    begin
      if vrai then
      begin
        list.Add(IntToStr(i));
        ShowMessage(IntToStr(list.Count));
      end;
    end;
  finally
    list.Free;
  end;
end;