Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu
Online

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

generic TList of Record - Direktzugriff auf Feld

  Alt 30. Aug 2011, 18: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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

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