Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi For - In-Schleife und TInterfaceList (https://www.delphipraxis.net/97938-schleife-und-tinterfacelist.html)

Die Muhkuh 19. Aug 2007 08:02


For - In-Schleife und TInterfaceList
 
Hi,

ich hab eine Klasse, die von TInterfaceList abgeleitet wird. Laut Delphi-Hilfe kann ich die For - In-Schleif mit der TInterfaceList nutzen. Nur wie?

Delphi-Quellcode:
  TMyClass = class(TInterfaceList)
  private
    function GetItem(Index: Integer): IMyInterface;
    function GetItemByName(Name: String): IMyInterface;
  public
    property Items[Index: Integer]: IMyInterface read GetItem; default;
    property ItemsByName[Name: String]: IMyInterface read GetItemByName;
  end;

function TMyClass.GetItemByName(Name: String): IMyInterface;
var
  MyI: IMyInterface;
begin
  for MyI in Items do // [1]
  begin
    if MyI.GetName = Name then
    begin
      Result := MyI;
      Exit;
    end;
  end;
end;
Bei [1] spuckt mir der Compiler folgende Fehlermeldung aus:

Zitat:

[Pascal Fehler] unit1.pas(64): E2029 '[' erwartet, aber 'DO' gefunden
Nutze ich die for in falsch oder muss ich noch irgendwas tun?

Elvis 19. Aug 2007 08:22

Re: For - In-Schleife und TInterfaceList
 
for-in ist in native Delphi furchtbar implementiert, Du musst dir praktisch für jeden Itemtypen eine neue Liste mit neuem Enumerator bauen.
Du kannst nämlich keinen Typen für das Item nehmen, der nicht direkt zuweisungskompatibel ist. *bummer*
Du musst also eintweder eine Variable vom Typen IInterface nehmen für for-in und dann damit deine besetzen, ider du nimmst das alte, hässliche for-to, oder du schaust dir DLangExtensions an. Andy hat es hingekriegt, dass man sein for-in sinnvoll benutzen kann.

Die Muhkuh 19. Aug 2007 08:25

Re: For - In-Schleife und TInterfaceList
 
Hi Elvis,

das ist natürlich sch... Dann werd ich beim alten For-To bleiben. Für die zweimal die, die ich die For-In brauche, lohnt es sich nicht einen Enumerator zu schreiben.

xaromz 19. Aug 2007 08:43

Re: For - In-Schleife und TInterfaceList
 
Hallo,

übrigens darf es nicht
Delphi-Quellcode:
for MyI in Items do
heißen, sondern
Delphi-Quellcode:
for MyI in Self do
Du willst ja durch die Liste iterieren, und nicht durch die Eigenschaft (den Zugriff auf die Eigenschaft erledigt dann der Enumerator).

Gruß
xaromz


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:32 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