【问题标题】:Typecasting from open array parameter to TArray<>从开放数组参数类型转换为 TArray<>
【发布时间】:2018-05-29 13:22:23
【问题描述】:

检查以下代码:

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 不兼容的类型:“System.TArray”和“TPoint 数组”

呼叫A(TArray&lt;&gt;(pts)); 不起作用。我解决了问题

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

将开放数组参数类型转换为 TArray 是否正确?还有其他方法吗?

请假设两个函数的参数类型不能改变。

【问题讨论】:

标签: delphi


【解决方案1】:

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

  1. 对两个过程都使用动态数组。
  2. 对两个过程都使用开放数组。
  3. 将打开的数组的内容复制到一个动态数组中,然后传递它。

我会注意到其中的复制成本很高,原则上我会拒绝该选项。

【讨论】:

  • 它看起来就像它工作。但是有些操作会失败。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-01
  • 1970-01-01
  • 2021-10-17
  • 2021-05-17
  • 1970-01-01
相关资源
最近更新 更多