Delphi 2009のジェネリックの多くのバグを見てきましたが、Update 3ではそれほど基本的なものがないとは思えませんでした。リストは、1つの以上の項目が含まれている場合は、汎用のTListまたはTObjectListを上IndexOfメソッドを呼び出すと、アクセス違反が発生します。Delphi 2009の一般的なTList <> 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です。モジュールのアドレス0048974Cでアクセス違反 『testbed.exe』アドレスの読み取りデバッグDCUをしてコンパイル00000000"
は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この問題を解決するには、ありがとう、ロディ! –