【发布时间】:2026-01-28 10:30:01
【问题描述】:
Steve McConnell 的清单项目之一是 you should not monkey with the loop index(第 16 章,第 25 页,循环索引,PDF 格式)。
这很直观,并且是我一直遵循的一种做法,除非我当时学会了如何编程。
在最近的一次代码审查中,我发现了这个尴尬的循环,并立即将其标记为可疑。
for ( int i=0 ; i < this.MyControl.TabPages.Count ; i++ )
{
this.MyControl.TabPages.Remove ( this.MyControl.TabPages[i] );
i--;
}
这几乎很有趣,因为它设法将索引保持为零,直到所有 TabPage 都被删除。
这个循环可以写成
while(MyControl.TabPages.Count > 0)
MyControl.TabPages.RemoveAt(0);
而且由于实际上控件与循环几乎同时编写,因此它甚至可以写成
MyControl.TabPages.Clear();
从那以后,我就代码审查问题受到质疑,发现我对为什么这是不好的做法的表述并不像我希望的那样有力。我说更难理解循环的流程,因此更难维护和调试,最终在代码的生命周期内成本更高。
是否有更好的说明为什么这是不好的做法?
【问题讨论】:
-
作为参考,在 Code Complete 2 (2004) ISBN 0-7356-1967-0 的第 377 页上可以找到避免使用循环索引的建议