我見過很多提及Delphi 2009中泛型的錯誤,但從來沒有想過在Update 3中失敗的基本原理,沒有。在通用調用的TList的IndexOf或TObjectList導致訪問衝突如果列表中包含1個或多個項目:通用TList <>在德爾福2009年崩潰在IndexOf
type
TTest = class(TObject);
procedure DoTest;
var
list : TObjectList<TTest>;
t : TTest;
begin
list := TObjectList<TTest>.Create;
try
t := TTest.Create;
list.IndexOf(t); // No items in list, correct result -1
list.Add(t);
list.IndexOf(t); // Access violation here
finally
list.Free;
end;
end;
唯一的例外是「EAccessViolation:訪問衝突在模塊‘testbed.exe’讀地址的地址0048974C。 00000000"
與調試的DCU編譯導致的問題generics.collections.pas - 在FComparer成員未分配:
function TList<T>.IndexOf(const Value: T): Integer;
var
i: Integer;
begin
for i := 0 to Count - 1 do
if FComparer.Compare(FItems[i], Value) = 0 then
Exit(i);
Result := -1;
end;
當然這使通用從TList幾乎完全無用。由於Update 3似乎沒有解決這個問題,除升級到XE之外,我是否有追索權?
+1,以便立即解決問題。謝謝,羅迪! – 2010-11-20 14:05:44