C#中yield的关键字几乎没有见过,今天用了一下,感觉很不错。
他是一个语法糖,直接将集合中满足条件的数据返回给调用者,提高性能。
直接上例子:
static void Main(string[] args)
{
string[] strs = new string[] { "3", "5", "7", "9" };
foreach (var item in StrToInt(strs))
{
if (item > 5)
{
Console.WriteLine(item.GetType() + "..." + item);
}
}
Console.ReadKey();
}
static List<int> StrToIntGeneral(string[] str)
{
//处理集合数据一般我们会在外面定义一个集合,然后在循环添加处理过的数据,然后将数据结果返回
List<int> list = new List<int>();
foreach (var s in str)
{
//这里需要把数组/集合里面的数组全部循环完毕再操作
list.Add(Convert.ToInt32(s));
}
return list;
}
static IEnumerable<int> StrToInt(string[] str)
{
foreach (var s in str)
{
yield return Convert.ToInt32(s);
}
//yield return就是将return的结果加到返回的集合中
//yield 关键字,将当前代码冻结,将控制器交给调用者,一旦满足条件立即返回结果.
}
两种写法比较,可以观察出执行顺序和代码的书写。
如果数据量很大,那么性能就非常的明显了,找到数据交给被调用者直接返回结果,不循环所有的数据再返回.
动手调试一下看看呢.