Я видел много упоминаний об ошибках в дженериках Delphi 2009, но никогда не ожидал, что что-то настолько простое в обновлении 3, не меньше.Вызов IndexOf для универсального TList или TObjectList вызывает нарушение прав доступа, если список содержит 1 или более элементов:
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: нарушение прав доступа по адресу 0048974C в модуле« testbed.exe ». Читатьадреса 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 почти полностьюбесполезный.Поскольку обновление 3, по-видимому, не исправило эту ошибку, есть ли у меня другие возможности, кроме обновления до XE?