![]() |
Delphi-Version: 2010
Typ für for each Schleife
Huhu,
kurze Frage. Wie muss der Typ des Parameters AIn lauten, damit ich TList, TObjectList, Arrays etc. übergeben kann? Sollte später nicht nur mit Integers funktionieren. Würde mir gerne das overloading sparen. :oops:
Delphi-Quellcode:
TEnumerator<integer> hab ich schon versucht, da kommt folgende Meldung:
function IsNumberIn(ANumber: integer; AIn: {TList, TObjectList, Array}): boolean;
var n: integer; begin result := false; for n in AIn do begin if n = ANumber then begin result := true; Break; end; end; end; Zitat:
Gibts da ne Möglichkeit? Gruß, Björn |
AW: Typ für for each Schleife
Muss das a nicht ein n sein?
MfG Fabian |
AW: Typ für for each Schleife
IEnumerable<T> bzw. TEnumerable<T> dürfte sein, was du suchst ;)
|
AW: Typ für for each Schleife
Zitat:
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 ist quasi eine Liste/Array mit vielen TMeinTyp drinnen.
TMeinListenTyp = class/record
... Function GetEnumerator: TMeinEnumerator; end; 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:
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.
var
x: TMeinTyp; List: TMeinListenTyp; for x in List do ...
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:16 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