在Delphi 2010中迭代索引属性

5
在 Delphi 2010 中,是否有一种方法可以遍历任何类型的索引属性(例如 TPageControl 的 Pages)?

1
@TLameActivePageIndex不是一个索引属性。 - David Heffernan
我不明白你的评论,顺便说一句,它相当冒犯... 我没有提到ActivePageIndex,我不知道你在哪里看到它。我说的是Pages。 - Rafael Piccolo
我猜你指的是已删除的评论。 - David Heffernan
2个回答

2

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


1

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

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

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

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

  • 大多数情况下,索引是整数
  • 大多数情况下,索引从零开始
  • 大多数情况下,有一个属性 Count 或 Length 告诉您如何获取结束值

最后,可以使用类助手(如果底层类型是记录,则使用记录助手)"retrofit" TPageControl with a GetEnumertor


我在网上搜索答案时看到了你的帖子(很好的东西)。在我的情况下,我有几个不同组件的半打索引属性。我只是遍历它们以获取“标题”属性。所以,现在,我有半打几乎相同的循环,我不喜欢那样。虽然GetEnumerator很酷,但对于这样一个小问题来说,那太多代码了。 - Rafael Piccolo
1
将这些循环抽象成一些通用代码,然后传递一个包含非相同代码的匿名方法给它,怎么样? - Jeroen Wiert Pluimers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接