【发布时间】:2018-03-20 11:05:36
【问题描述】:
我有一些函数接受TObject 数组作为var 参数,例如:
type
TObjectArray = array of TObject;
...
procedure DeleteAt(var AArray : TObjectArray; AIndex : integer);
begin
while(AIndex < Length(AArray) - 1) do
begin
AArray[AIndex] := AArray[AIndex + 1];
Inc(AIndex);
end;
SetLength(AArray, Length(AArray) - 1);
end;
为了重用相同的函数,我将TObject 的后代类的几个动态数组转换为TObjectArray,然后再将它们传递给我的函数,例如:
var
Buttons : array of TButton;
begin
SetLength(Buttons, 1);
Buttons[0] := Button1;
//...
DeleteAt(TObjectArray(Buttons), 0);
end;
这是一种安全的做法还是可能会导致一些我没有考虑过的问题?
【问题讨论】:
-
如果你只转换与 TObject 兼容的数组,那么它可能会起作用。但无论如何,这很糟糕。为什么不使用通用 TList
? -
@AndreiGalatyn:因为我使用的是 Delphi 2007
-
您可以使用常规类 TList / TObjectList。
-
当然你可以做得比这更好。但是,是的,这会成功的。
-
@DavidHeffernan:你能解释一下你的意思吗?
标签: arrays delphi casting dynamic-arrays delphi-2007