通过Delphi 2010中的索引属性进行迭代

时间:2011-10-31 10:41:36

标签: delphi properties rtti indexed

在Delphi 2010中有没有办法迭代任何类型的索引属性(比如Pages of TPageControl)?

2 个答案:

答案 0 :(得分:2)

如果我理解正确,您希望通过RTTI迭代这些属性,而无需了解有关属性及其索引值的任何信息。 因为有效的索引值不能是整数值序列,所以这是不可能的。可能存在具有字符串索引或使用对象引用作为索引值的属性。并且RTTI中没有机制来查询可用于迭代的有效索引值。

答案 1 :(得分:1)

不,这是不可能的,因为没有标准模式:

  • 指定索引类型
  • 指定要使用的索引的起始值和结束值

这就是为什么某些类具有枚举器的原因:它是告诉for ... in语句如何枚举它的模式。

然而,您可以做的是最佳估计:

  • 大多数时候索引是整数
  • 指数大多数时间从零开始
  • 大部分时间都有一个属性Count或Length告诉您如何获取最终值

最后,可以"retrofit" TPageControl with a GetEnumertor using class helpers(或者如果基础类型是记录,则记录助手)。