Por que uma dinâmica array of string
se torna incompatível com outra dinâmica array of string
quando colocada dentro de um registro ou classe?
type
TRec = record
ArrayInRecord: array of string;
end;
var
Rec: TRec;
SimpleArray1, SimpleArray2, CombinedArrayOK, CombinedArrayFail: array of string;
begin
SimpleArray1 := ['1', '2'];
SimpleArray2 := ['3', '4'];
CombinedArrayOK := SimpleArray1 + SimpleArray2; // No problem here
Rec.ArrayInRecord := ['5', '6'];
CombinedArrayFail := SimpleArray1 + Rec.ArrayInRecord; // E2008 Incompatible types
end;
Na verdade, isso não tem nada a ver especificamente com a presença de classes ou registros.
Na verdade, até isso falha:
O problema é simplesmente que cada um
array of string
introduz um novo tipo no sistema de tipos.Classicamente, a solução seria introduzir seu próprio tipo de array:
Então você sempre precisaria usar esse tipo.
Mas em versões modernas do Delphi, você não precisa fazer isso. Em vez disso, use apenas
TArray<string>
o que já está definido no RTL:(Introduzir um tipo personalizado ou usar
TArray<string>
também é a solução para a pergunta relacionada e comum "Como retornar um array de uma função?".)