delphi - 无效的类型转换

标签 delphi delphi-xe6

当我尝试转换Array of Integer时至TArray<Integer>在程序中我收到错误 E2089 Invalid typecast 。我怎样才能输入cast它才能工作?

program Project11;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  System.Math;

type
  TArrayManager<T> = record
    class procedure Shuffle(var A: TArray<T>); static;
  end;

class procedure TArrayManager<T>.Shuffle(var A: TArray<T>);
var
  I, J: Integer;
  Temp: T;
begin
  for I := High(A) downto 1 do
  begin
    J := RandomRange(0, I);
    Temp := A[I];
    A[I] := A[J];
    A[J] := Temp;
  end;
end;

procedure Test(var A: Array of Integer);
begin
  TArrayManager<Integer>.Shuffle(TArray<Integer>(A)); // Invalid typecast????
end;

var
  A: Array of Integer;
begin
  // TArrayManager<Integer>.Shuffle(TArray<Integer>(A)); // Works
  Test(A);

end.

最佳答案

您无法将开放数组参数强制转换为动态数组。它们根本不兼容。如果您希望在不复制的情况下对数组的一部分进行操作,恐怕您需要分别传递数组和索引。像这样:

procedure Foo(var A: TArray<Integer>; Index, Count: Integer);
begin
  // operate on A[Index] to A[Index+Count-1]
end;

关于delphi - 无效的类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24637674/

相关文章:

sorting - Delphi 按 ItemData.Detail 对 TListBox 进行排序?

Delphi 7,将 Form 设置为 BitBtn 的父级时出错

android - Delphi XE6 Firemonkey 表格

delphi - 如何在设计时轻松找到组件

delphi - 我使用自己构建的调试库和常规DCU在Delphi中管理超大型代码库

delphi - 删除有关已声明但未使用的符号的编译器警告

json - 如何检查 SuperObject 中是否存在特定元素?

delphi - 在Delphi中,TBitmap.Monochrome和.PixelFormat如何影响.ScanLine的格式?

delphi - 缺少有关变量可能尚未初始化的警告

delphi - Delphi中如何调用CreateProcess?