简化代码:
class procedure ArrayUtils.test<T>(var myArray: Array of T);
begin
SetLength(myArray, 1);
end;
这会导致错误
E2008 Incompatible types
。显然 SetLength
不能与这样定义的数组一起使用,并且由于其他设计限制,我无法使用 TArray<T>
。那么我如何在这里调整数组的大小呢?
我不确定为什么编译器拒绝这样做,因为当使用本地 Array of T
时它编译得很好?我也尝试删除var
,但没有运气。
编辑:我尝试的另一件事是做
myArray := myArray + [element];
。没用,同样的错误。
在方法签名中使用
array of X
时无法调整大小,因为它不是人们想象的动态数组,而是所谓的 开放数组参数。
当您想要调整传入的动态数组的大小时,您需要使用
TArray<T>
或其他一些动态数组类型声明。