Delphi是否提供任何不错的方法来迭代TCollection中的TCollectionItem?

大概是……

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


那不会编译

还是真的没有我能做的比这更优雅的了:

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

最佳答案

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

从而:

for mycollectionitem in mycollection do
   mycollectionitem.setWhatever();


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

09-20 22:22