TObjectList <t> .Contains导致Delphi 2009中的访问冲突</t>

时间:2012-03-30 09:11:35

标签: delphi generics delphi-2009

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

现在我发现这段代码会在访问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;

1 个答案:

答案 0 :(得分:5)

这是基于linked answer

的修复程序

变化

MyList := TMyList.Create;

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