Frage 1: Warum ist das so?
Weil der Compiler anscheinend nicht schlau genug ist zu sehen dass der Typ deiner Variable und der Typ deines Parameters der gleiche ist. Das "Array of" scheint zwei mal inline einen neuen Typ zu generieren. So zumindest hat man mir das mal erklärt.
Kann man das irgendwie umgehen?
Delphi-Quellcode:
type
TWhatever = type Integer;
const
someSpookyNumer = 42;
var
myArray: TArray<TWhatEver>; // statt "array of TWhatEver"
procedure p(var data: TArray<TWhatever>); // statt "array of TWhatEver"
begin
SetLength(data, someSpookyNumer);
end;
begin
p(myArray);
end.