推荐答案
public IEnumerable<int> GenerateNumbers(int max) { for (int i = 0; i < max; i++) { yield return i; } }
本题详细解读
1. yield
关键字的作用
yield
关键字用于在迭代器方法中逐个返回元素,而不需要一次性生成所有元素。它允许你在方法中暂停执行,并在需要时继续执行。yield return
用于返回一个元素,而 yield break
用于终止迭代。
2. 迭代器方法
迭代器方法是一种返回 IEnumerable
或 IEnumerator
的方法。使用 yield
关键字的迭代器方法会在每次调用 MoveNext
时执行到下一个 yield return
语句,并返回相应的值。
3. 示例代码解析
public IEnumerable<int> GenerateNumbers(int max) { for (int i = 0; i < max; i++) { yield return i; } }
GenerateNumbers
方法是一个迭代器方法,返回IEnumerable<int>
。- 在
for
循环中,每次迭代都会执行yield return i
,返回当前的i
值。 - 调用
GenerateNumbers
方法时,并不会立即执行整个循环,而是在每次迭代时返回一个值。
4. 使用示例
foreach (var number in GenerateNumbers(5)) { Console.WriteLine(number); }
- 上述代码会输出
0
到4
,每次迭代时GenerateNumbers
方法会返回下一个值。
5. 注意事项
yield
关键字只能在返回IEnumerable
或IEnumerator
的方法中使用。- 迭代器方法的状态会在每次
yield return
时保存,并在下次调用时恢复。 yield break
可以用于提前终止迭代。