Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#1

generic TList of Record - Direktzugriff auf Feld

  Alt 30. Aug 2011, 19:47
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?
Angehängte Dateien
Dateityp: pas DList.pas (4,5 KB, 24x aufgerufen)
Dateityp: pas Project2.dpr.pas (1,4 KB, 12x aufgerufen)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (30. Aug 2011 um 19:53 Uhr)
  Mit Zitat antworten Zitat