AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi generic TList of Record - Direktzugriff auf Feld
Thema durchsuchen
Ansicht
Themen-Optionen

generic TList of Record - Direktzugriff auf Feld

Ein Thema von himitsu · begonnen am 30. Aug 2011 · letzter Beitrag vom 30. Aug 2011
 
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.316 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)
Ein Therapeut entspricht 1024 Gigapeut.

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


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz