Kennt folgendes schon jemand?
Delphi-Quellcode:
var Y: TList<TMyRec>;
Y := TList<TMyRec>.Create;
R.S := 'abc';
Y.Add(R);
Y[0].S := 'xyz'; // [DCC Fehler] Project2.dpr(25): E2064 Der linken Seite kann nichts zugewiesen werden
WriteLn(Y[0].S);
Y.Free;
ging vor D2010 mal, aber die Änderung wurde nicht in die Liste übernommen
siehe
http://www.delphipraxis.net/162591-r...delphi-xe.html
Vor D2010 gab es noch keine Fehlermeldung, aber dafür gingen die Änderungen gerne mal verloren.
Eventuell gäbe es da ja Abhilfe, wenn man nur den Record als Pointer zugänglich machen würde.
Delphi-Quellcode:
program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils, DList;
type
TMyRec =
record
S:
String;
i: Integer;
end;
var
X: TDirectList<TMyRec>;
R: TMyRec;
i: Integer;
begin
try
X := TDirectList<TMyRec>.Create;
try
R.S := '
Hallo';
R.i := 1;
X.Add(R);
// der normale Weg halt
with X.Add^
do begin // wenn kein Punkt folgt, sollte man den ^ nicht vergessen
S := '
du';
i := 2;
end;
X.Add.S := '
Welt';
i := X.AddP;
X[i].S := '
^^';
// eigentlich X.ItemsD[i].S := '^^'; aber ist ja das Default
for i := 0
to X.Count - 1
do begin
WriteLn(X[i].i, '
', X[i].S);
X[i].S := X[i].S + '
';
end;
for R
in X
do
Write(R.S);
// hier aber nur Lesezugriffe möglich, es sei denn, ...
WriteLn;
finally
X.Free;
end;
WriteLn('
*Ende*');
ReadLn;
except
on E:
Exception do begin
WriteLn(E.ClassName, '
: ', E.
Message);
ReadLn;
end;
end;
end.
Ja ja, man könnte natürlich auch eine Klasse aus dem Record machen und würde dann eine
TObjectList<TMyClass>
verwenden.
@SirThornberry: Wie findest du meinen brutalen Weg, um an FItems ranzukommen?