for all/for each looping through a Delphi TCollection?

4.5k Views Asked by At

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();
1

There are 1 best solutions below

3
On BEST ANSWER

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.