yield return语法解析:
1.yield return 用于循环遍历中,返回IEnumberable<T>
2.yield return用于终止循环遍历
3.通过设置“断点”,先F5,然后F11,单步调试,可以发现不同之处。
说明:IEnumberable<T>是一个可循环体,可迭代体, List<T>继承实现了这个接口
源代码:
/***
* 学习yield return 语法
*
*
* 使用两个方法,显示1-100所有的偶数
*
* yield return所属的方法与一般方法不同
* 在方法中,如果遇到yield return,会暂时“离开方法体”,
* 执行方法体以外的语句,然后再回来
*
* yield return适合“海量”循环次数的情况
*
*
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace chapter3_yieldreturn
{
class Demo2
{
private List<int> _NumberArray; //数组集合
public Demo2()
{
_NumberArray = new List<int>();
for (int i = 1; i <= 100; i++)
{
_NumberArray.Add(i);
}
}
/// <summary>
/// 一般方法,适用于循环次数比较小
/// </summary>
/// <returns></returns>
IEnumerable<int> GetAllEvenNumber()
{
List<int> result = new List<int>();
foreach (var num in _NumberArray)
{
if (num%2==0)
{
result.Add(num);
}
}
return result;
}
/// <summary>
/// 使用yield return算法,循环次数量非常多的情况
/// </summary>
/// <returns></returns>
IEnumerable<int> GetAllEvenNumberByYieldReturn()
{
foreach (var num in _NumberArray)
{
if (num % 2 == 0)
{
yield return num;
}
}
yield break;//相当于return,当foreach不再执行时,会执行这一句。
}
/// <summary>
/// 测试1
/// </summary>
public void Test1()
{
Console.WriteLine("一般方法的测试");
foreach (var item in GetAllEvenNumber())
{
Console.WriteLine(item);
}
}
/// <summary>
/// 测试2
/// </summary>
public void Test2()
{
Console.WriteLine("yield return方法的循环测试");
foreach (var item in GetAllEvenNumberByYieldReturn())
{
Console.WriteLine(item);
}
}
static void Main(string[] args)
{
Demo2 obj = new Demo2();
//obj.Test1();
obj.Test2();
Console.ReadKey();
}
}
}