gpt4 book ai didi

delphi - for在TObjectList中怎么办?

转载 作者:行者123 更新时间:2023-12-03 14:57:30 27 4
gpt4 key购买 nike

我正在尝试使用 for in 来迭代 TObjectList:

program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
System.SysUtils, Contnrs;

var
list: TObjectlist;
o: TObject;
begin
list := TObjectList.Create;
for o in list do
begin
//nothing
end;
end.

编译失败:

[dcc32 Error] Project1.dpr(15): E2010 Incompatible types: 'TObject' and 'Pointer'

看起来 Delphi 的 for in 构造不能处理无类型、未降序的 TObjectList 和 as 可枚举目标。

如何枚举 TObjectList 中的对象?

我现在做什么

我当前的代码是:

procedure TfrmCustomerLocator.OnBatchDataAvailable(BatchList: TObjectList);
var
i: Integer;
o: TObject;
begin
for i := 0 to BatchList.Count-1 do
begin
o := BatchList.Items[i];

//...snip...where we do something with (o as TCustomer)
end;
end;

出于某种原因,我希望将其更改为:

procedure TfrmCustomerLocator.OnBatchDataAvailable(BatchList: TObjectList);
var
o: TObject;
begin
for o in BatchList do
begin
//...snip...where we do something with (o as TCustomer)
end;
end;

为什么要使用枚举器?只是原因。

最佳答案

使用泛型,你可以有一个类型化的对象列表(刚刚注意到评论,但无论如何我都会完成这个)

如果您正在寻找使用 TObjectList<T> 的充分理由原因是它可以节省代码中的大量类型转换

program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
System.SysUtils, Generics.Collections;
Type
TCustomer = class
private
public
//Properties and stuff
end;

var
list: TObjectlist<TCustomer>;
c: TCustomer;
begin
list := TObjectList<TCustomer>.Create;
for c in list do
begin
//nothing
end;
end.

关于delphi - for在TObjectList中怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26102891/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com