Generic TList <> en Delphi 2009 crash en IndexOf
He visto muchas menciones de errores en los genéricos de Delphi 2009, pero nunca esperé que algo tan básico fallara en la Actualización 3, nada menos. Llamar a IndexOf en un TList genérico o TObjectList provoca una infracción de acceso si la lista contiene 1 o más elementos:
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;
La excepción es "EAccessViolation: Infracción de acceso en la dirección 0048974C en el módulo 'testbed.exe'. Lectura de la dirección 00000000"
Compilar con DCU de depuración genera un problema en generics.collections.pas: el miembro de FComparer no está asignado:
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;
Por supuesto, esto hace que el TList genérico sea casi completamente inútil. Como la Actualización 3 no parece haber solucionado este error, ¿tengo otro recurso que no sea actualizar a XE?