yield

关键词:延迟、当前位置保留、IEnumerable

例:

复制代码
        static void Main(string[] args)
        {
            IEnumerable ie = funyield();
            foreach (string s in ie)
            {
                Console.WriteLine(s);
            }
            Console.ReadKey();
        }
        public static IEnumerable funyield()
        {
            yield return "ff";
            yield return "DD";
            yield return "bb";
        }
复制代码

1.延迟
  当Main函数执行时,执行完IEnumerable ie=funyield();语句后,实际根本没有执行funyield方法,当之后对其进行迭代的时候才会去执行。
  一旦我们在一个返回类型为IEnumerable或IEnumerable<T>的方式中通过yield return 返回集合元素,意味着这个方法中的操作会被”延后执行“---操作的真正执行不是发生在调用时候,而是延后到对返回的集合进行迭代的时候。

2.保留位置
  对上述代码 打断点,再执行时会发发现,foreach每次的迭代都要去执行funyield方法,并且一次执行返回的数据,第一次执行返回 ff ,保留位置,下次再迭代的时候就要从下一个开始,即执行返回 DD

3.IEnumerable
  在使用yield关键字的时候,返回类型必须是IEnumerableIEnumerable<T>IEnumeratorIEnumerator<T>

MSDN:http://msdn.microsoft.com/zh-cn/library/vstudio/9k7k7cf0.aspx

posted @   武沛齐  阅读(535)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示