例子:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
foreach (int i in Power(2, 8, ""))
{
Console.Write("{0} ", i);
}
Console.ReadKey();
}
public static IEnumerable<int> Power(int number, int exponent, string s)
{
int result = 1;
for (int i = 0; i < exponent; i++)
{
result = result * number;
yield return result;
}
yield return 3;
yield return 4;
//yield break;
yield return 5;
}
}
}
输出:2 4 8 16 32 64 128 256 3 4
经过断点,表现上 似乎每个yield return 都返回给foreach的一个值。并且foreach的下一个值得来源是Power函数上次yield return的栈帧的继续执行的下一个yield return的值!
难怪这样的特性可以实现协程。
yield break 则结束了Power的栈帧记录。
个人理解,抛砖引玉。