yield关键字用于遍历循环中,yield return用于返回IEnumerable
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using log4net;
namespace Test
{
class Program
{
static void Main(string[] args)
{
List<int> list = new List<int>();
for (int i = 1; i < 101; i++)
list.Add(i);
//获取偶数集合
//TestMethod(GetAllEvenNumber(list));
TestMethod(GetAllEvenNumberByYield(list));
Console.ReadLine();
}
public static void TestMethod(IEnumerable<int> param)
{
foreach (var item in param)
{
Console.WriteLine(item);//输出偶数集合
}
}
public static IEnumerable<int> GetAllEvenNumber(IEnumerable<int> param)
{
List<int> result = new List<int>();
foreach (var item in param)
{
if (item % 2 == 0)
{
result.Add(item);
}
}
return result;
}
public static IEnumerable<int> GetAllEvenNumberByYield(IEnumerable<int> param)
{
foreach (var item in param)
{
if (item % 2 == 0)
{
yield return item;
}
}
}
}
}
GetAllEvenNumber方法,是把结果集全部加载到内存中再遍历;GetAllEvenNumberByYield方法,客户端每调用一次,yield return就返回一个值给客户端,是"按需供给",这样有个好处,我们假如有1000000个数据,我们需要得到里面的耦合,当我们通过这个方法得到一个耦合会立马显示在控制台上。而不是等很久也就把全部偶数都查找到存入集合当中,然后在一一遍历输出。这个好处是很大的。比如我们用户可能就看数据开始肯定不是全部值需要部分就可以,看完这些在看后面的,这样数据会让觉得显示没有延迟