对于所有/每个循环通过Delphi TCollection?

Jes*_*own 3 delphi loops tcollection

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

也许,某些事情......

for mycollectionitem in mycollection.Items do
  mycollectionitem.setWhatever();
Run Code Online (Sandbox Code Playgroud)

但这不会编译

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

for num := 1 to mycollection.Count do
  mycollection.Items[num-1].setWhatever();
Run Code Online (Sandbox Code Playgroud)

Mas*_*ler 5

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

从而:

for mycollectionitem in mycollection do
   mycollectionitem.setWhatever();
Run Code Online (Sandbox Code Playgroud)

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

  • 还要记住,在Delphi 2007中引入了`for..in`,因此它不适用于旧版本. (2认同)