yield return用于简化迭代器实现,按需返回元素并支持延迟执行;2. 它只能在返回IEnumerable或IEnumerator类型的方法中使用,编译器自动生成状态机;3. 示例中CountUp方法利用for循环结合yield return实现惰性求值,遍历时逐个生成值,避免一次性加载全部数据到内存。

在 .NET 中,yield return 是一个非常实用的关键字组合,用于简化迭代器的实现。它允许你按需返回集合中的每个元素,而不需要提前将所有数据加载到内存中,特别适合处理大量数据或需要延迟计算的场景。
基本语法和作用
yield return 只能在返回类型为 IEnumerable、IEnumerable
示例:生成一个简单的整数序列
public static IEnumerable{
yield return 1;
yield return 2;
yield return 3;
}
调用时:
foreach (var num in GetNumbers()){
Console.WriteLine(num);
}
实现延迟执行
使用 yield return 最大的优势是支持延迟执行(Lazy Evaluation)。这意味着只有在遍历到某个元素时,才会执行生成该元素的代码。
例如:
酷纬企业网站管理系统Kuwebs是酷纬信息开发的为企业网站提供解决方案而开发的营销型网站系统。在线留言模块、常见问题模块、友情链接模块。前台采用DIV+CSS,遵循SEO标准。 1.支持中文、英文两种版本,后台可以在不同的环境下编辑中英文。 3.程序和界面分离,提供通用的PHP标准语法字段供前台调用,可以为不同的页面设置不同的风格。 5.支持google地图生成、自定义标题、自定义关键词、自定义描
{
for (int i = 1; i {
Console.WriteLine($"生成 {i}");
yield return i;
}
}
当你开始遍历时,每一步才真正执行循环体。这能有效节省内存和提升性能,特别是当集合很大但只用到前几项时。
异常与限制
使用 yield return 有一些限制需要注意:
- 不能出现在匿名方法或 lambda 表达式中
- 不能在 try-catch 语句的 catch 块中使用 yield return
- 可以配合 try-finally 使用,用于资源清理
- yield return 所在的方法不能有 return 语句返回值(但可使用无返回值的 return)
合法示例(try-finally):
public static IEnumerable{
using (var reader = File.OpenText(filePath))
{
string line;
while ((line = reader.ReadLine()) != null)
{
yield return line;
}
}
}
这个例子逐行读取文件,不会一次性加载整个文件内容,非常适合大文件处理。
基本上就这些。yield return 让你可以写出简洁高效的迭代逻辑,同时保持良好的内存使用特性。









