Im Zusammenhang mit diesem Problem ist mir bei einem ähnlichen Konstrukt ein weiterer seltsamer Effekt aufgefallen, der sich nicht sofort erschließt:
Delphi-Quellcode:
type
TGenObj<T1, T2> = class
public type
TGenObjRec = record
A: T1;
B: T2;
end;
TGenObjRecs = TArray<TGenObjRec>;
protected
procedure SetRecs(const AValue: TGenObjRecs);
public
property Recs: TGenObjRecs write SetRecs;
end;
TGenIntStrObj = TGenObj<Integer, string>;
procedure TForm1.Button1Click(Sender: TObject);
const
RECS: array[0..1] of TGenIntStrObj.TGenObjRec = (
(A: 1; B: 'Foo'), // <-- @A: [dcc32 Fehler] E2071 Dieser Typ kann nicht initialisiert werden
(A: 2; B: 'Bar')
);
var
LGenIntStrObj: TGenIntStrObj;
begin
LGenIntStrObj := TGenIntStrObj.Create;
try
LGenIntStrObj.Recs := RECS;
finally
FreeAndNil(LGenIntStrObj);
end;
end;
Warum ist das denn so?