Search code examples
delphiloopstcollection

for all/for each looping through a Delphi TCollection?


Does Delphi provide any nice way to iterate over TCollectionItems in a TCollection?

Something, perhaps, along the lines of...

for mycollectionitem in mycollection.Items do
  mycollectionitem.setWhatever();

That doesn't compile though

or is there really nothing I can do that's more elegant than this:

for num := 1 to mycollection.Count do
  mycollection.Items[num-1].setWhatever();

Solution

  • For..in loops are implemented as calls to GetEnumerator and the methods on the variable it returns. The Items property is not an object, but an array property that maps silently to a getter/setter pair, so it can't return an enumerator, but TCollection itself does have a GetEnumerator method.

    Thus:

    for mycollectionitem in mycollection do
       mycollectionitem.setWhatever();
    

    Be aware, though, that TCollection is not a generic class, so the type of the enumerator index variable will be TCollectionItem, and not whatever ItemClass you're working with.