在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循环,如果有任何
我想学习它背后的原因答案 0 :(得分:3)
如您所见,第二种做法更具可读性。它减少了代码重复,您无需在每次计算中声明array[i]
。
你的第二个问题是为什么你的IDE将for-each
循环转换为for
循环,基本上for-each
循环将你的对象视为可枚举,这意味着它是其他对象的集合,并且它们实现了IEnumerator接口,IEnumerator对象在其自身称为Iterator模式中实现一个设计模式,允许您迭代集合并获取集合的下一个值。
长故事短For
循环在数组中具有更好的性能,因为它们使用较少的计算来检索下一个值,但通常不是您应该担心的事情。
答案 1 :(得分:1)
它只是重构。没有速度提升,没有使用秘密技术,只是重构。当你需要编辑代码时,它只是让你的工作更容易,而不是写出数组[i] .this和array [i] .that和array [i] .otherstuff你做e.that e.that.e.otherstuff。打字更快,更容易阅读...