从开放阵列参数到TArray的类型转换<>

时间:2018-05-29 13:22:23

标签: delphi

检查以下代码:

function A(const points: TArray<TPoint>): Boolean;
begin
   //Something
end;

procedure B(var pts: array of TPoint)
begin
   A(pts); //Compiler error E2010 Incompatible types
end;

它产生编译器错误:

E2010不兼容的类型:&#39; System.TArray&#39;和TPoint&#39;

的数组

致电A(TArray<>(pts));并不起作用。我解决了这个问题

A(TArray<TPoint>(@pts));

将开放数组参数强制转换为TArray&lt;&gt ;?是否正确?还有其他办法吗?

请假设功能的参数类型不能更改。

1 个答案:

答案 0 :(得分:3)

你不能执行这样的类型转换。开放数组不是动态数组。您的选择包括:

  1. 对两个过程使用动态数组。
  2. 对两个程序使用开放数组。
  3. 将打开数组的内容复制到动态数组,然后传递。
  4. 其中我会注意到复制很昂贵,我原则上会拒绝这个选项。