常见迭代错误
了解迭代时修改数据的问题。
常见迭代错误 是 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 反馈 — 无需本地设置。