Итерация по индексируемому свойству в Delphi 2010 - PullRequest
5 голосов
/ 31 октября 2011

Есть ли в Delphi 2010 способ перебора любого индексированного свойства (например, Pages TPageControl)?

Ответы [ 2 ]

2 голосов
/ 31 октября 2011

Если я правильно вас понимаю, вы хотите перебирать эти свойства через RTTI, ничего не зная о свойстве и его значениях индекса.Поскольку допустимые значения индекса не должны быть последовательностью целочисленных значений, это не может быть возможным.Могут быть свойства со строковыми индексами или со ссылками на объекты в качестве значения индекса.И в RTTI нет механизма для запроса допустимых значений индекса, которые можно было бы использовать для итерации.

1 голос
/ 31 октября 2011

Нет, это невозможно, поскольку не существует стандартного шаблона, который:

  • указывает тип индекса
  • указывает начальное и конечное значения индекса для использования

Вот почему некоторые классы имеют перечислители: это шаблон, который указывает для оператора for ... in, как его перечислять.

Однако то, что вы можете сделать, является наилучшей оценкой:

  • чаще всего индекс целочисленный
  • чаще всего индекс начинается с нуля
  • в большинстве случаев существует свойство Count или Length, которое сообщает вам, как получить конечное значение

Наконец, можно "модифицировать" TPageControl с помощью GetEnumertor с помощью помощников класса (или помощников записей, если базовый тип является записью).

...