这是许多样式中的一种样式规则,不一定是您可以考虑的所有可能规则中最重要的规则。您的示例(由于包含int)并不是超级引人注目,但您肯定可以在该循环内构造一个昂贵的对象,并且可能在循环外构造该对象是一个很好的论据。但是,这并不是一个反对该规则的好理由,因为首先,它可以应用很多其他地方,而不涉及在循环中构造昂贵的对象,其次,一个好的优化器(并且您已经标记了C#,因此您有一个不错的优化器)可以将初始化提升到循环之外。
此规则的真正原因也是您看不到为什么这是规则的原因。人们过去常常编写数百行甚至数千行的函数,并且他们过去常常在纯文本编辑器(例如记事本)中编写函数,而没有提供Visual Studio提供的支持。在这种环境中,声明与使用位置相距数百行的变量意味着该人正在阅读
if (flag) limit += factor;
没有关于标志,限制和因素是什么的线索。诸如匈牙利符号之类的命名约定被用来帮助解决这一问题,诸如声明事物在其使用位置附近的规则也被采用。当然,如今,所有这些都与重构有关,并且函数通常不到一页长,因此很难在声明的位置和使用的位置之间取得很大的距离。您在0到20的范围内进行操作,并且怀疑在这种特定情况下7没问题,而制定规则的人会喜欢离开7条线,并试图让某人从700下降。最重要的是,在Visual Studio中,您可以将鼠标悬停在任何内容上并查看其类型,它是否是成员变量等等。这意味着减少了查看声明它的行的需要。
这仍然是一个相当不错的规则,如今确实很难打破这一规则,而且从来没有人提倡将其作为编写慢速代码的理由。首先要明智。