delphi 使用TArray.Copy与泛型数组

nzrxty8p  于 2022-11-04  发布在  其他
关注(0)|答案(1)|浏览(420)

我尝试使用TArray.Copy将泛型数组中的所有项复制到一个新数组中(注意:在 Delphi XE7中,该函数没有文档)。

class procedure Copy<T>(const Source, Destination: array of T; SourceIndex, DestIndex, Count: NativeInt); overload; static;
class procedure Copy<T>(const Source, Destination: array of T; Count: NativeInt); overload; static;

执行函数后,Source数组会变成以零填满的数组:

var
  Source : TArray<Integer>;
  Destination : TArray<Integer>;
begin
  Source := [10, 20];
  SetLength(Destination, Length(Source));

  //here Source is [10, 20]

  TArray.Copy<Integer>(Source, Destination, 0, 0, Length(Source));

  //here Source is [0, 0]
end;

为什么要更改源数组?

bxjv4tth

bxjv4tth1#

X1 m0n1x在XE 7中被破坏,因为有人混淆了System.Move的参数:
RSP-9763: TArray.Copy copies from destination to source for unmanaged types
RSP-9887: TArray.Copy is broken in multiple ways
FWIW,对于你的场景,它不需要TArray.Copy-System.Copy可以处理复制数组,如果复制的范围从头开始。如果你想复制整个内容,你甚至可以省略第二个和第三个参数,只需要调用:

Destination := Copy(Source);

相关问题