Delphi 2009的TList泛型实现如何使用?

2026-04-28 01:191阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计293个文字,预计阅读时间需要2分钟。

Delphi 2009的TList泛型实现如何使用?

我已经发现Delphi 2009泛型中的许多错误,虽然目前还没有在Update 3中发现此类基本错误,但不会少。例如,如果列表包含一个或多个项目,在TList或TObjectList上调用IndexOf时会导致访问冲突。

我已经看到许多提到Delphi 2009泛型中的错误,但从来没有预料到在Update 3中会出现如此基本的错误,不会少.如果列表包含一个或多个项目,则在通用TList或TObjectList上调用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之外,我还有其他办法吗?

看看这个问题. Why is TList.Remove() producing an EAccessViolation error?

Delphi 2009的TList泛型实现如何使用?

特别是,尝试像这样创建你的TList

TList<TTest>.Create(TComparer<TTest>.Default);

标签:GenericTListA

本文共计293个文字,预计阅读时间需要2分钟。

Delphi 2009的TList泛型实现如何使用?

我已经发现Delphi 2009泛型中的许多错误,虽然目前还没有在Update 3中发现此类基本错误,但不会少。例如,如果列表包含一个或多个项目,在TList或TObjectList上调用IndexOf时会导致访问冲突。

我已经看到许多提到Delphi 2009泛型中的错误,但从来没有预料到在Update 3中会出现如此基本的错误,不会少.如果列表包含一个或多个项目,则在通用TList或TObjectList上调用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之外,我还有其他办法吗?

看看这个问题. Why is TList.Remove() producing an EAccessViolation error?

Delphi 2009的TList泛型实现如何使用?

特别是,尝试像这样创建你的TList

TList<TTest>.Create(TComparer<TTest>.Default);

标签:GenericTListA