![]() |
generic TList of Record - Direktzugriff auf Feld
Liste der Anhänge anzeigen (Anzahl: 3)
Kennt folgendes schon jemand?
Delphi-Quellcode:
ging vor D2010 mal, aber die Änderung wurde nicht in die Liste übernommen
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; siehe ![]() 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
Delphi-Quellcode:
verwenden. :roll:
TObjectList<TMyClass>
@SirThornberry: Wie findest du meinen brutalen Weg, um an FItems ranzukommen? |
AW: generic TList of Record - Direktzugriff auf Feld
Die Möglichkeit, einen nested Type als Pointer auf einen Typenparameter innerhalb eines generischen Typens zu deklarieren, ist ein Bug (Quelle:
![]() Also nicht wundern oder jammern, wenn das mal nicht so klappt, wie gedacht. |
AW: generic TList of Record - Direktzugriff auf Feld
So wie ich das dort glaube verstanden zu haben, ist das schon richtig.
Aber es gibt manchmal einen Bug, welcher irgendwann in ferner Zukunft (also nie, wie immer) gefix werden solle. :gruebel: Ich glaub in D2009 hatte ich da mal einen derartigen Bug und der Workaround war nicht schön und dazu noch Fehleranfällig.
Delphi-Quellcode:
Denn es könnte passieren, daß ^T <> P.
type
TMyGenType<T, P> = class(...) end; TNewType = TMyGenType(Byte, PByte); Nja, ist man ja langsam gewohnt, daß immer irgendwas nicht funktioniert. |
AW: generic TList of Record - Direktzugriff auf Feld
Zitat:
Zitat:
|
AW: generic TList of Record - Direktzugriff auf Feld
Hmmm, aber schön, daß die Generics noch mehr beschränkt werden sollen ... man kann ja schon jetzt nicht viel damit anfangen :?
|
AW: generic TList of Record - Direktzugriff auf Feld
Zitat:
Und ich sehe auch nicht, dass sie noch mehr beschränkt werden sollen - eher im Gegenteil: Zitat:
|
AW: generic TList of Record - Direktzugriff auf Feld
Die ein bis zwei billigen Standardsachen funktionieren ja.
Aber wenn nichtmal Pointer funktionieren (also DAS Delphifeature schlechthin), dann ... Oder wo ist die starke Typbindung von Delphi geblieben? (
Delphi-Quellcode:
)
TMyGenType<T: TStrings>
|
AW: generic TList of Record - Direktzugriff auf Feld
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:46 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-2025 by Thomas Breitkreuz