3

Delphi 是否提供了任何好方法来迭代 TCollection 中的 TCollectionItems?

一些东西,也许,沿着......

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

虽然没有编译

或者真的没有什么比这更优雅的了:

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

1 回答 1

6

For..in循环被实现为对它返回的变量的调用GetEnumerator和方法。该Items属性不是一个对象,而是一个静默映射到 getter/setter 对的数组属性,因此它不能返回枚举器,但TCollection它本身确实有一个GetEnumerator方法。

因此:

for mycollectionitem in mycollection do
   mycollectionitem.setWhatever();

但是请注意,这TCollection不是泛型类,因此枚举器索引变量的类型将是TCollectionItem,而不是ItemClass您正在使用的任何类型。

于 2014-11-20T01:27:39.807 回答