考虑 C# 中的以下两个 for 循环。两者相比有什么优点/缺点吗?
一个不将元素存储在索引 i 处。
for(var i = 0; i < array.Length; i++) {
if(array[i].foo == 5) array[i].foo = array[i].bar + array[i].qux;
// More usages of 'array[i]'
}
一个将元素存储在局部变量中的索引 i 中
for(var i = 0; i < array.Length; i++) {
var e = array[i];
if(e.foo == 5) e.foo = e.bar + e.qux;
// More usages of 'e'
}
我正在使用的 IDE 将 foreach 循环转换为后者形式的 for 循环,如果有的话,我想了解它背后的原因
如您所见,第二种做法更具可读性。 它减少了代码重复,您无需在每次计算中声明array[i]
。
第二个问题是关于为什么您的 IDE 将for-each
循环转换为for
循环,基本上for-each
循环将您的对象视为可枚举,这意味着它是其他对象的集合,它们实现了 IEnumerator 接口,IEnumerator 对象在其自身中实现了一种设计模式,称为迭代器模式,它允许您在集合中迭代并获取集合的下一个值。
长话短话短For
循环在数组中具有更好的性能,因为它们使用较少的计算来检索下一个值,但通常这不是您应该担心的事情。
它只是重构。没有速度提升,没有使用秘密技术,它只是重构。当你需要编辑代码时,它只是让你的工作更容易,而不是写出array[i].this和array[i].that和array[i].otherstuff,你做e.this e.that.otherstuff。打字更快,更容易阅读...