今天来聊聊C#的关键字:yield,它主要用于生成器和迭代器中。
using System; using System.Collections; var numbers = GetNumbers(5); // 堆代码 duidaima.com foreach (var number in numbers) { Console.WriteLine(number); } IEnumerable GetNumbers(int count) { for (int i = 1; i <= count; i++) { yield return i; } } //输出: 1 2 3 4 5
//传统写法 IEnumerable GetNumbers(int[] nums) { var list = new List<int>(); foreach (var item in nums) { if (item > 0) { list.Add(item); } } return list; } //yield写法,简化代码结构 IEnumerable GetNumbers(int[] nums) { foreach (var item in nums) { if (item > 0) { yield return item; } } }使用yield不仅简化代码结构,让代码更加已读,而且减少内存消耗,特别是大集合的情况。
using System.Collections; var numbers = GetNumbers(5); foreach (var number in numbers) { Console.WriteLine("当前时间:{0},返回值:{1}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), number); } IEnumerable GetNumbers(int count) { for (int i = 1; i <= count; i++) { yield return i; //休眠5秒 Thread.Sleep(5000); } }运行效果,无需等待所有任务执行完毕: