C# yield return關鍵字理解
阿新 • • 發佈:2019-01-09
例子:
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的棧幀記錄。
個人理解,拋磚引玉。