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
。