C#面试题更新 2026-08-03

请解释在C#中自定义迭代器时,yield return和yield break分别扮演什么角色?它们如何影响迭代器的执行流程?

考察说明

考查对C#迭代器语法和yield关键字工作机制的理解。

回答思路

  1. 【回答框架 1】yield return用于逐个返回元素,每次迭代到该语句时暂停方法执行,保存当前状态,下次迭代从暂停处继续。yield break用于提前终止迭代,不返回任何元素,类似于循环中的break。
  2. 【回答框架 2】自定义迭代器通常通过实现IEnumerable或IEnumerable<T>接口,并使用yield return返回序列。编译器会将包含yield的方法转换为状态机,自动维护迭代状态。
  3. 【回答框架 3】yield return和yield break只能用于返回IEnumerable、IEnumerable<T>、IEnumerator或IEnumerator<T>的方法中,且不能在try块中与catch或finally混用(yield return不能在try-catch中,但可在try-finally中)。
  4. 【回答框架 4】迭代器是惰性执行的,每次调用MoveNext时只执行到下一个yield return或方法结束。yield break使MoveNext返回false,终止迭代。
  5. 【回答框架 5】如果方法无显式yield break,自然结束也终止迭代,但yield break提供提前退出条件。
  6. 【关键点 1】yield return暂停执行并返回元素,yield break终止迭代。
  7. 【关键点 2】迭代器基于状态机,惰性执行。
  8. 【关键点 3】yield只能在特定返回类型的方法中使用。