是否将数组元素存储在 for 循环内的索引处



考虑 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。打字更快,更容易阅读...

最新更新