Warum kann ich kein beliebiges String-Array zurückgeben?

Der Compiler ermöglicht mir Folgendes:

procedure MyProc(const ADynData: array of string);

oder

procedure MyProc(const ADynData: TStringDynArray);

und übergebe beliebige Daten wie folgt:

MyProc(['Data1', 'Data2']);

Allerdings nicht zulassen

function MyFunc: TStringDynArray;
....
function MyFunc: TStringDynArray;
begin
    Result := ['Data1', 'Data2'];
end;

oder

function MyFunc: TStringDynArray;
const
    CDynData: array[0..1] of string = ('Data1', 'Data2');
begin
    Result := CDynData;
end;

Warum ist das? Ist das nichttechnisch das gleiche?

Was ist für diese speziellen Szenarien die empfohlene (und effizienteste) Methode, um ein beliebiges Array von Zeichenfolgen zurückzugeben?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage