2012-03-30 82 views
2

德尔福2009年,我曾与泛型没有大的问题,到目前为止(使用Generics.Collections名单,没有特殊的泛型功能)。TObjectList <T>。载导致访问冲突德尔福2009年

现在我发现这个代码将导致一个AV,其中访问MyList.Contains行。

错误消失如果我声明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; 
+5

相关:http://stackoverflow.com/questions/4216733/仿制TLIST功能于德尔福2009年崩溃上的indexOf – 2012-03-30 09:24:01

+0

@VilleKrumlinde我不只是说相关的,我会说这是完全一样的日ING。 'TObjectList <>'从'TList <>'派生,所以'TList <>'中的错误也出现在'TObjectList <>'中。 – hvd 2012-03-30 09:30:35

回答

5

这是修复的基础上,linked answer

变化

MyList := TMyList.Create; 

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

颜色让我感到惊讶,编译器不仅在2009年做了正确的事情。顺便说一下,这在XE和XE2中得到了修复。你为什么不升级? – 2012-03-30 13:33:41