The enumerator operator can be used to define an enumerator for any type. It must return a class, object, or extended record that has the same signature as the IEnumerator interface. Note that this operator is not recognized by the compiler under the Delphi syntax mode.
The following code will define an enumerator for the Integer type:
Type TEvenEnumerator = Class FCurrent : Integer; FMax : Integer; Function MoveNext : Boolean; Property Current : Integer Read FCurrent; end; Function TEvenEnumerator.MoveNext : Boolean; begin FCurrent:=FCurrent+2; Result:=FCurrent<=FMax; end; operator enumerator(i : integer) : TEvenEnumerator; begin Result:=TEvenEnumerator.Create; Result.FMax:=i; end; var I : Integer; m : Integer = 4; begin For I in M do Writeln(i); end.
The loop will print all nonzero even numbers smaller or equal to the enumerable. (2 and 4 in the case of the example).
More about enumerators and the enumerator operator can be found in the section 13.2.5, page 719.