Добавление метода Append к типу generi c TArray - PullRequest
0 голосов
/ 03 апреля 2020

Я пытаюсь добавить метод Append к типу System.Generics.Collections.TArray.

unit uMyArray;

interface

uses
  System.Generics.Collections;

type
  TArray = class(System.Generics.Collections.TArray)
  public
    class procedure Append<T>(var AValues: array of T; const AItem: T); static;
  end;

implementation

class procedure TArray.Append<T>(var AValues: array of T; const AItem: T);
begin
  SetLength(AValues, Length(AValues) + 1);
  AValues[Length(AValues) - 1] := AItem;
end;

end.

При компиляции я получаю следующую ошибку в строке SetLength:

[Ошибка dcc32] uMyArray.pas (18): E2008 Несовместимые типы

1 Ответ

3 голосов
/ 03 апреля 2020

Вы не можете изменить размер параметра открытого массива. Вам нужно передать TArray<T>.

Изменить

class procedure Append<T>(var AValues: array of T; const AItem: T); static;

на

class procedure Append<T>(var AValues: TArray<T>; const AItem: T); static;
...