![]() |
AW: Insert und NextGen
Zitat:
Delphi-Quellcode:
Insert gibt eine Kopie des Strings zurück und wenn man den nochmal ändert, dann bleibt der eigentliche String unverändert. :stupid:
S.Insert(...); // richtig
S.Insert(...); S := S.Insert(...); // geht, aber bissl sinnlos S := S.Insert(...); S.Insert(...).Insert(...) // niemals so S.Remove(...); // falsch S.Remove(...); S := S.Remove(...); // richtig? S := S.Remove(...); S := S.Remove(...).Remove(...); // das geht ebenfalls Das zweite Insert geht dann ins Nichts, obwohl man es "optisch" benauso gemacht hat, wie beim ersten Mal. Insert verändert zwar den String selber, aber man sollte sich nun sicherheitshalber dennoch angewöhnen das Result neu zuzuweisen. Während Remove, was scheinbar dem Delete entspricht, nur das Result beeinflust, also wenn das nicht verwirrend ist?
Delphi-Quellcode:
var
S, S2: string; begin S := 'ace'; S.Insert(1, 'b'); S.Insert(3, 'd'); ShowMessage(S); // abcde S := 'ace'; S.Insert(1, 'b').Insert(3, 'd'); // zweites Insert verläuft sich im Nirgendwo ShowMessage(S); // abce ! S := 'ace'; S := S.Insert(1, 'b').Insert(3, 'd'); // S wurde geändert, in abce, und wurde dann vom Result überschrieben ShowMessage(S); // abcde S := 'ace'.Insert(1, 'b').Insert(3, 'd'); // keine Problem, da nur Result benutzt und die Änderung an der Konstante ins Nix ging ShowMessage(S); // abcde // Insert als Erstes verhält sich anders, wie nachfolgende Aufrufe S := 'ac'; S.Insert(1, 'b'); S2 := S.Remove(1, 1); ShowMessage(S + ' ' + S2); // abc ac S := 'ac'; S2 := S.Insert(1, 'b').Remove(1, 1); // Insert ändert S und Result, Remove geht nur auf Result ShowMessage(S + ' ' + S2); // abc ac S := 'abc'; S.Remove(1, 1); // Remove hat auf S keine Wirkung S2 := S.Insert(1, 'b'); // Insert ändert S und S2 ShowMessage(S + ' ' + S2); // abbc abbc S := 'abc'; S2 := S.Remove(1, 1).Insert(1, 'b'); // Insert hat keine Wirkung auf S (und Remove auch nicht ... sieht aber so aus, als ging es) ShowMessage(S + ' ' + S2); // abc abc end; Naja, die Helper können nett sein, aber für Insert, Delete, Length und vorallem SetLengeh kann man sich selber doch fast nur empfehlen beim Alten zu bleiben. PS: AnsiString, UTF8String und dyn. Arrays fehlen noch ganz. Was soll's, AnsiStrings kann man bei Multiplatform eh vergessen. ![]() Keine Ahnung was mit dem 0-Index los war. Inzwischen scheint es zu laufen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:33 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