首页/ 第 5 章 · C# 编程基础/ 第 55 课
LESSON 55 · C# 编程基础

循环:foreach 遍历

foreach 已掌握。下一课学 break 与 continue 控制循环。

⏱ 约 12 分钟📊 难度:入门🗂 第 5 章 · C# 编程基础📍 第 55 / 300 课
课程进度
55 / 300

🎯本节学习目标

  • 掌握 foreach 语法
  • 理解遍历的概念
  • 知道 foreach 的局限性

🚀课程导读

要“把一篮子苹果挨个看一遍”就叫遍历。foreach 是遍历集合最安全的方式。

foreach 语法

挨个取出集合里的元素。

  1. 语法:foreach (类型 变量名 in 集合) { 循环体 }
  2. 每轮循环把集合中的一个元素赋给变量,直到遍历完所有元素。
  3. 例:int[] nums = { 10, 20, 30 }; foreach (int n in nums) { Debug.Log(n); } 输出 10,20,30。
  4. 特点:不需要手动管下标、不会越界,安全简洁。
  5. 适合:数组、List、Dictionary 的键值、以及 Unity 中 FindObjectsOfType 等返回的集合。
  6. 【局限】foreach 遍历时不能修改集合元素数量(不能删除元素),否则报错。
  7. 想删除集合元素用 for 倒序遍历(第 56 课)。
💡
foreach 只读遍历是首选;要改元素或删元素再考虑 for。

Unity 实战:遍历场景中的物体

批量处理所有同类型对象。

  1. 在场景里创建 5 个 Cube(可 Ctrl+D 复制)。
  2. 新建脚本 ForeachDemo,在 Start 里写:
  3. foreach (GameObject go in Object.FindObjectsOfType<GameObject>()) { if (go.name.StartsWith("Cube")) { Debug.Log("找到:" + go.name); } }
  4. 【解释】:FindObjectsOfType<GameObject>() 返回场景中所有对象,foreach 逐个处理,用条件筛出名字以 Cube 开头的。
  5. 播放运行,Console 输出所有 Cube 的名字。
  6. 简化:直接遍历数组更常见——先声明 string[] names = { "A", "B", "C" }; foreach 打印。
  7. 体会 foreach 在“批量处理”上的便利。
💡
FindObjectsOfType 在 Update 里每帧调用很耗性能,应放 Start 或缓存,第 16 章性能课会讲。

常见错误与排查

错误:foreach 中删除元素报错:Collection was modified?
原因:遍历期间修改集合被禁止
解决:改用 for 倒序遍历删除,或先收集再删除。

动手练习

课后小任务(做出来才算真的学会)

  • 用 foreach 打印一个字符串数组的所有元素
  • 遍历场景中的 5 个 Cube 并打印名字
  • 说出 foreach 与 for 的适用场景

本节小结

foreach 已掌握。下一课学 break 与 continue 控制循环。

完成打卡后,主站会实时更新你的学习进度 🎯

← 上一课循环:while 与 do-while