2012-03-30 81 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