Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Schleife über TStrings Zeilen (ohne Index zu verwenden) (https://www.delphipraxis.net/202408-schleife-ueber-tstrings-zeilen-ohne-index-zu-verwenden.html)

mjustin 31. Okt 2019 07:41

Delphi-Version: XE7

Schleife über TStrings Zeilen (ohne Index zu verwenden)
 
Hallo,

beim Versuch einen class helper für TStrings zu schreiben bin ich darüber gestolpert dass es in TStrings keine Property Strings gibt über die man iterieren kann

Delphi-Quellcode:
function TMyFirstStringsHelper.ToQuotedValueList: string;
var
   S: string;
begin
   Result := '';

   for S in Self.Strings do // <--- Fehler: [dcc32 Fehler] E2029 '[' erwartet, aber 'DO' gefunden
   begin
      if Result <> '' then
      begin
         Result := Result + ',';
      end;

      Result := Result + '''' + Trim(S) + '''';
   end;
end;
Ich kann hier natürlich mit einem Index arbeiten, dachte aber dass es auch mit einem for S in Konstrukt möglich sein müsste. Habe ich etwas übersehen?

Uwe Raabe 31. Okt 2019 07:50

AW: Schleife über TStrings Zeilen (ohne Index zu verwenden)
 
Delphi-Quellcode:
for S in Self do
sollte gehen.

jaenicke 1. Nov 2019 05:45

AW: Schleife über TStrings Zeilen (ohne Index zu verwenden)
 
Hintergrund ist, dass Strings die indizierte Property zum Zugriff auf einzelne Elemente ist. Darin gibt es aber keinen Enumerator, der ist in TStrings selbst drin.

mjustin 1. Nov 2019 11:49

AW: Schleife über TStrings Zeilen (ohne Index zu verwenden)
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1450573)
Delphi-Quellcode:
for S in Self do
sollte gehen.

Oh, das naheliegendste hatte ich übersehen, Danke :)

Zitat:

Zitat von jaenicke (Beitrag 1450629)
Hintergrund ist, dass Strings die indizierte Property zum Zugriff auf einzelne Elemente ist. Darin gibt es aber keinen Enumerator, der ist in TStrings selbst drin.

Ja, die Strings Property funktioniert nur mit Index. Da stellt sich mir die Frage, ob man auch für eigene Klassen eine Collection Property definieren kann, über die man dann über for ... in iterieren kann. Man kann über Collections mit for ... in iterieren, aber liegt das eiinfach nur an bestimmten Interfaces die man dazu in einer Klasse implementieren muss?

Oh, schon etwas dazu gefunden:

http://www.nickhodges.com/post/Enume...A6in-Loop.aspx


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:35 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz