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...