在Delphi 2009中,到目前为止,我对泛型没有大问题(使用Generics.Collections列表,没有特殊的泛型功能)。

现在,我发现此代码将导致访问MyList.Contains的行中出现AV。

如果我声明TMyList = class(TList<TMyEntry>),该错误将消失;

我应该避免使用TObjectList<T>还是代码中的其他原因导致此错误?

type
  TMyEntry = class(TStringlist);
  TMyList = class(TObjectList<TMyEntry>);

procedure TListTests.TestAV;
var
  Entry: TMyEntry;
  MyList: TMyList;
begin
  MyList := TMyList.Create;
  try
    Entry := TMyEntry.Create;

    MyList.Add(Entry);

    Assert(MyList.Contains(Entry));  // <--- AV

  finally
    MyList.Free;
  end;
end;

最佳答案

这是基于linked answer的修复程序:

更改

MyList := TMyList.Create;




MyList := TMyList.Create(TComparer<TMyEntry>.Default);

关于delphi - TObjectList <T>。包含在Delphi 2009中导致访问冲突,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9940082/

10-10 15:16