Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.021 Beiträge
 
Delphi 12 Athens
 
#7

AW: Anonyme Methode in Schleife ausführen - wie abbrechen?

  Alt 4. Okt 2022, 16:05
ich hab ein Konstrukt, mit dem ich ein Objekt kapsele, um daraus ein Interface zu machen. Das Interface stellt dann eine Art ForEach-Methode für Daten des Objekts zur Verfügung
Wäre das nicht eher etwas für einen Enumerator?
Delphi-Quellcode:
type
  TMyObject = class
  private type
    TEnumerator = record
    private
      FIndex: Integer;
      FOwner: TMyObject;
      function GetCurrent: string;
    public
      constructor Create(AOwner: TMyObject);
      function MoveNext: Boolean;
      property Current: string read GetCurrent;
    end;
  private
    FList: TStringList;
  public
    constructor Create;
    destructor Destroy; override;
    function GetEnumerator: TEnumerator;
  end;

function TMyObject.GetEnumerator: TEnumerator;
begin
  Result := TEnumerator.Create(Self);
end;

constructor TMyObject.TEnumerator.Create(AOwner: TMyObject);
begin
  FIndex := -1;
  FOwner := AOwner;
end;

function TMyObject.TEnumerator.GetCurrent: string;
begin
  Result := FOwner.FList[FIndex];
end;

function TMyObject.TEnumerator.MoveNext: Boolean;
begin
  Inc(FIndex);
  Result := FIndex < FOwner.FList.Count;
end;
Dann kannst du die übliche for-in Syntax verwenden und die Abbruchbedingung direkt einprogrammieren:
Delphi-Quellcode:
var
  myObject: TMyObject;
begin
  myObject := TMyObject.Create;
  try
    for var S in myObject do begin
      if S = 'Stopthen
        Break;
      ShowMessage(S);
    end;
  finally
    myObject.Free;
  end;
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat