0Pricing
C# Academy · 课时

常见迭代错误

了解迭代时修改数据的问题。

常见迭代错误 是 CoddyKit 上的免费 C# Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 C# Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 C# Academy 课程共包含 4 节课。

迭代陷阱

循环看似简单,但一些错误会一次又一次地让初学者困惑。

本课将介绍最常见的迭代错误,以及如何避免这些错误。

迭代时修改集合

最大的错误是在使用 foreach 遍历集合时修改集合。

在迭代过程中添加或删除元素,会在运行时引发 InvalidOperationException。

foreach (var n in list)
{
    if (n < 0) list.Remove(n); // ERROR at runtime
}

安全修复方案

如果要在循环时删除元素,请遍历副本,或者先收集元素,再在循环结束后删除它们。

遍历 list.ToList() 会为您提供一个可以遍历的独立快照。

var list = new List<int> { 1, -2, 3, -4 };
foreach (var n in list.ToList())
{
    if (n < 0) list.Remove(n);
}
Console.WriteLine(string.Join(",", list));

for 循环中的差一错误

使用手动 for 循环时,如果使用 <= 而不是 <,就会读取到末尾之外的位置。

有效索引的范围是从 0 到 Length - 1,因此条件应为 i < Length。

for (int i = 0; i <= arr.Length; i++) // BUG: <= goes too far
{
    Console.WriteLine(arr[i]);
}

IndexOutOfRange

这种差一错误会导致 IndexOutOfRangeException。

foreach 完全避免了这个问题,因为它从不使用索引。当您只需要读取元素时,应优先使用它。

string[] arr = { "a", "b", "c" };
for (int i = 0; i < arr.Length; i++) // correct: < Length
{
    Console.WriteLine(arr[i]);
}

期望迭代循环修改元素

为循环变量赋值不会改变集合,而对于值类型来说,循环变量本身无论如何都是一个副本。

要更新元素,请使用带索引的 for 循环。

int[] nums = { 1, 2, 3 };
for (int i = 0; i < nums.Length; i++)
{
    nums[i] = nums[i] * 10;
}
Console.WriteLine(string.Join(",", nums));

空引用集合

对 null 引用调用 foreach 会引发 NullReferenceException。

empty 集合没有问题,但 null 不行。请在循环前进行检查或初始化。

List<int> data = null;
if (data != null)
{
    foreach (var x in data) Console.WriteLine(x);
}

变量作用域混淆

循环变量只存在于循环体内部。

尝试在循环之后使用它会导致编译错误,因为循环结束后它就超出了作用域。

foreach (var n in nums)
{
    Console.WriteLine(n);
}
// Console.WriteLine(n); // ERROR: n not in scope here

忘记大括号

没有大括号时,只有紧接着的下一条语句属于循环。

这可能会在不易察觉的情况下破坏逻辑。对于多行循环体,请始终使用大括号,以明确表达代码意图。

foreach (var n in nums)
    Console.WriteLine(n);
    Console.WriteLine("runs once, not per item");

条件循环中的无限循环风险

与 foreach 不同,while 循环的条件如果永远不会变为 false,就可能永远运行。

请始终确保循环内部有某些操作会使执行逐渐接近退出条件。

int i = 0;
while (i < 3)
{
    Console.WriteLine(i);
    i++; // forgetting this would loop forever
}

选择正确的循环

读取每个元素,无需索引 → foreach。

需要索引或必须就地修改 → for。重复执行,直到条件发生变化 → while。

快速检查

测试您对迭代错误的学习成果。

回顾

您学会了避免在 foreach 期间修改集合、使用 <= 时产生差一错误、处理空引用集合,以及避免作用域混淆。

使用 foreach 读取元素,使用 for 按索引修改元素,使用 while 执行具有明确退出条件的条件循环。

常见问题解答

「常见迭代错误」课时是免费的吗?

是的 — 「常见迭代错误」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 C# Academy 课程的其余内容,请升级到 CoddyKit PRO。 C# Academy 课程共包含 4 节课。

「常见迭代错误」这节课中我会学到什么?

了解迭代时修改数据的问题。 你通过在浏览器中直接运行的动手代码来练习 C# Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 C# Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 C# Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「常见迭代错误」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 C# Academy 课中编写并运行代码吗?

能。每节 C# Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. foreach 循环
  2. 迭代集合
  3. break 与 continue
  4. 常见迭代错误
← 返回 C# Academy