在 C# 编程中,迭代器(Iterator) 是一个非常强大但初学者容易忽略的概念。尤其是它的延迟执行(Lazy Evaluation) 特性,常常让刚接触的人感到困惑。本文将用通俗易懂的方式,带你彻底搞懂 C# 迭代器的延迟执行机制,并通过实际代码演示其工作原理。
在 C# 中,迭代器是一种可以逐个返回集合元素的方法。它通常使用 yield return 关键字来实现。当你调用一个包含 yield return 的方法时,C# 编译器会自动生成一个实现了 IEnumerable<T> 接口的类。
关键点来了:这个方法不会立即执行!只有在你真正遍历结果(比如用 foreach)时,代码才会一行一行地运行。这就是所谓的延迟执行。
我们来看一个简单的例子:
using System;using System.Collections.Generic;class Program{ static void Main() { Console.WriteLine("开始调用 GetNumbers 方法..."); var numbers = GetNumbers(); // 此时方法体并未执行! Console.WriteLine("GetNumbers 方法已返回,但未执行内部逻辑。"); Console.WriteLine("开始遍历..."); foreach (var num in numbers) // 此时才真正执行 GetNumbers 内部代码 { Console.WriteLine(num); } } static IEnumerable<int> GetNumbers() { Console.WriteLine("进入 GetNumbers 方法"); for (int i = 1; i <= 3; i++) { Console.WriteLine($"准备返回 {i}"); yield return i; } Console.WriteLine("GetNumbers 方法结束"); }} 运行这段代码,你会看到输出顺序是:
这清楚地展示了 C# 迭代器 的 延迟执行 特性:只有在 foreach 开始遍历时,GetNumbers 方法中的代码才真正运行。
延迟执行带来几个显著优势:
.Take(5)),后面的计算根本不会发生。很多初学者会误以为调用 GetNumbers() 就会立即执行方法体。记住:返回 IEnumerable<T> 的方法,若使用了 yield return,则具有延迟执行特性。
如果你希望“立即执行”,可以强制转换为列表:
var numbers = GetNumbers().ToList(); // 此时会立即执行整个方法 但这样做会失去延迟执行的优势,需谨慎使用。
通过本文,你应该已经理解了 C# 迭代器 的 延迟执行 特性。关键在于:yield return 返回的是一个 IEnumerable<T> 对象,它封装了“如何生成数据”的逻辑,而不是数据本身。只有在遍历时,这些逻辑才会被触发。
掌握这一机制,能帮助你写出更高效、更节省内存的 C# 代码。无论你是处理大数据流、构建 LINQ 查询,还是设计自定义集合,延迟执行 都是你不可或缺的利器。
SEO关键词回顾:C#迭代器、延迟执行、IEnumerable、yield return
本文由主机测评网于2025-12-06发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025123684.html