yield return 和 yield break
时间: 2024-12-30 21:25:54 浏览: 21
### C# 中 `yield return` 和 `yield break` 的用法及区别
#### 使用场景
当编写迭代器方法时,可以使用 `yield return` 来返回集合中的每一项,而无需显式创建整个列表。这有助于节省内存并提高性能[^3]。
```csharp
public IEnumerable<int> GetNumbers()
{
for (int i = 0; i < 5; i++)
{
yield return i;
}
}
```
上述代码每次调用枚举器的 MoveNext 方法时都会执行一次循环体,并返回当前索引对应的数值给 Enumerator.Current 属性,直到完成五次迭代为止[^3]。
#### 提前终止序列
如果希望提前结束遍历,则可以在适当条件下使用 `yield break` 关键字来立即停止生成后续元素:
```csharp
public IEnumerable<int> GetPositiveNumbers(int[] numbers)
{
foreach (var number in numbers)
{
if (number <= 0)
yield break;
yield return number;
}
}
```
在这个例子中,一旦遇到不大于零的数就会触发 `yield break` 并退出函数,不再继续处理剩余项目[^3]。
#### 性能考虑
对于简单的异步操作或不需要复杂控制流的情况,应该优先选择更轻量级的方式而非完全依赖异步方法;同样地,在实现自定义迭代逻辑时也应权衡好何时采用这两种关键字以优化程序效率[^1]。
阅读全文