Для всех / для каждого цикла через Delphi TCollection?

Предоставляет ли Delphi хороший способ перебора TCollectionItems в TCollection?

Возможно, что-то вроде...

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

Это не компилируется, хотя

или я действительно ничего не могу сделать, это более элегантно, чем это:

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

1 ответ

Решение

For..in циклы реализованы как вызовы GetEnumerator и методы для переменной, которую он возвращает. Items Свойство - это не объект, а свойство массива, которое молча сопоставляется с парой получатель / установщик, поэтому оно не может вернуть перечислитель, но TCollection сам по себе имеет GetEnumerator метод.

Таким образом:

for mycollectionitem in mycollection do
   mycollectionitem.setWhatever();

Знайте, однако, что TCollection не является универсальным классом, поэтому тип переменной индекса перечислителя будет TCollectionItemа не как ItemClass ты работаешь с

Другие вопросы по тегам