Для всех / для каждого цикла через 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
ты работаешь с