Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对于通过Delphi t收集的所有/每个循环?_Delphi_Loops_Tcollection - Fatal编程技术网

对于通过Delphi t收集的所有/每个循环?

对于通过Delphi t收集的所有/每个循环?,delphi,loops,tcollection,Delphi,Loops,Tcollection,Delphi是否提供了在TCollection中迭代TCollectionItems的好方法 也许,有点类似于 for mycollectionitem in mycollection.Items do mycollectionitem.setWhatever(); 但这并不能编译 或者我真的没有什么比这更优雅的了: for num := 1 to mycollection.Count do mycollection.Items[num-1].setWhatever(); For..

Delphi是否提供了在TCollection中迭代TCollectionItems的好方法

也许,有点类似于

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
方法

因此:


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

还要记住,
for..in
是在Delphi 2007中引入的,因此它不适用于旧版本。@Remy:是的,但是考虑到OP在本例中使用的是
for..in
语法,可以合理地假设他使用的是支持它的版本。OP希望使用
for..in
语法。这并不意味着他实际上有一个Delphi版本,支持
for..in
循环。其他一些语言在语法上与..类似,所以他可能只是在猜测。他没有说任何暗示他正在使用的Delphi版本的话。如果必须使用经典for to循环,我会将
for num:=0写入mycollection。Count-1 do
,只是说。哪一个版本的Delphi?您面临的编译器错误是什么?
for mycollectionitem in mycollection do
   mycollectionitem.setWhatever();