Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#4

AW: Typ für for each Schleife

  Alt 13. Okt 2010, 10:15
IEnumerable<T> bzw. TEnumerable<T> dürfte sein, was du suchst
Muß nicht unbedingt sein ... kann man auch selber machen.
Sooo große Hexerei steckt da nicht dahinter.

Die Klasse oder der Record, welche für For-In genutzt werden soll muß nur eine Public-Funktion Namens "GetEnumerator" besitzen, welche dann von Delphi aufgerufen wird.
Delphi-Quellcode:
TMeinListenTyp = class/record
  ...
  Function GetEnumerator: TMeinEnumerator;
end;
TMeinListenTyp ist quasi eine Liste/Array mit vielen TMeinTyp drinnen.

Und die Klasse TMeinEnumerator muß diese Funktionen und Property beinhalten:
Delphi-Quellcode:
TMeinEnumerator = Class
  Constructor Create(Const List: TMeinListenTyp);
  Function GetCurrent: TMeinTyp;
  Function MoveNext: Boolean;
  Property Current: TMeinTyp Read GetCurrent;
End;
Delphi-Quellcode:
var
  x: TMeinTyp;
  List: TMeinListenTyp;

for x in List do ...
Ach ja, TMeinEnumerator und TMeinListenTyp können auch ein und die selbe Klasse sein, mit überladenen Konstructoren für die normale Erstellung und die Erstellung des Enumerators.



Delphi-Quellcode:
TMeinListenTyp = Pecord
Private
  FList: array of TMeinTyp;
  FEnumIndex: Integer;
Public
  Constructor Create; overload;
  ...
  Function GetEnumerator: TMeinListenTyp;
  Constructor Create(List: TMeinListenTyp); overload;
  Function GetCurrent: TMeinTyp;
  Function MoveNext: Boolean;
  Property Current: TMeinTyp Read GetCurrent;
End;

Constructor TMeinListenTyp.Create(List: TMeinListenTyp);
  Begin
    FList := List.FList; // Werte speichern oder einfach nur eine Referenz auf List merken und dann darüber auf die Liste zugreifen
    FEnumIndex := -1;
  End;

Function TMeinListenTyp.GetCurrent: TMeinTyp;
  Begin
    Result := FList[FEnumIndex];
  End;

Function TMeinListenTyp.MoveNext: Boolean;
  Begin
    Result := FEnumIndex < Length(FList);
    If Result Then Inc(FEnumIndex);
  End;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (13. Okt 2010 um 10:19 Uhr)
  Mit Zitat antworten Zitat