Writing enumerable types

When the for...in loop was introduced in Delphi 2005, the concept of enumerable types was also introduced into the Delphi language.

A type is defined as enumerable if it can be iterated. That is, it can be the target of the for...in loop.

As you know, there are some built-in enumerable types; however, you can create your own enumerable types using a very simple pattern.

To make your container enumerable, implement a single method called GetEnumerator, which must return a reference to an object, interface, or record that implements the following two methods and one property (in the example, the element to enumerate is TFoo):

function GetCurrent: TFoo; 
function MoveNext: Boolean; 
property Current: TFoo read GetCurrent; 

There are a lot of samples related to standard enumerable types, so in this recipe you'll look at some not-so-common utilizations.