- yield return 所属方法与一般方法不同。
- 在方法中,如果遇到yield return ,会离开当前方法体,执行引用该方法体的语句,再返回。
- yield return 用于循环遍历中,返回IEnumberable.
- yield return 用于暂时中止循环遍历
- yield return 适用于在一个海量的循环方法中,中间不断的push 出单次循环所得到的数据等类似的情况。
关于IEnumerable和 IEnumerator的理解:
IEnumerable和IEnumerator详解
关于unity 协程的理解
unity协程
yield return 案例代码
class Demo2
{
private List<int> _NumberArray; //数组集合
public Demo2()
{
_NumberArray = new List<int>();
for (int i = 0; i < 100; i++)
{
_NumberArray.Add(i);
}
}
/// <summary>
/// 使用yield return算法,有符合条件的值跳出循环,到达引用方直接输出
/// </summary>
/// <returns></returns>
IEnumerable<int> GetAllEventNumberByYieldReturn()
{
foreach (var num in _NumberArray)
{
if (num % 2 == 0)
{
yield return num;
}
}
yield break;
}
/// <summary>
/// 一般方法,将符合条件的数值添加到result容器中后一并输出
/// </summary>
/// <returns></returns>
IEnumerable<int> GetAllEvenNumber()
{
List<int> result = new List<int>();
foreach (int num in _NumberArray)
{
if (num % 2 == 0)
{
result.Add(num);
}
}
return result;
}
public void Test1()
{
Console.WriteLine("一般方法的测试");
foreach (var item in GetAllEvenNumber())
{
Console.WriteLine(item);
}
}
public void Test2()
{
Console.WriteLine("yield return 方法测试");
foreach (var num in GetAllEventNumberByYieldReturn())
{
Console.WriteLine(num);
}
}
static void Main(string[] args)
{
Demo2 demo2 = new Demo2();
demo2.Test1();
Console.ReadLine();
}
}