對“yield”關(guān)鍵字的個人理解

上代碼:

class Program

? ? {

? ? ? ? static void Main(string[] args)

? ? ? ? {

? ? ? ? ? ? //var list = Power(2, 8).ToList();

? ? ? ? ? ? var list = Power(2, 8);

? ? ? ? ? ? foreach (int i in list)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? Console.Write("{0} \r\n", i);

? ? ? ? ? ? }

? ? ? ? ? ? Console.ReadKey();

? ? ? ? }

? ? ? ? public static IEnumerable<int> Power(int number, int exponent)

? ? ? ? {

? ? ? ? ? ? int result = 1;

? ? ? ? ? ? for (int i = 0; i < exponent; i++)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? result = result * number;

? ? ? ? ? ? ? ? yield return result;

? ? ? ? ? ? }

? ? ? ? ? ? //Thread.Sleep(1000);

? ? ? ? ? ? yield return 3;

? ? ? ? ? ? //Thread.Sleep(1000);

? ? ? ? ? ? yield return 4;

? ? ? ? ? ? //Thread.Sleep(1000);

? ? ? ? ? ? yield return 5;

? ? ? ? }

? ? }

執(zhí)行結(jié)果:



如圖:當(dāng)取消睡眠代碼注釋時,前面2到256瞬間輸出,而輸出3、4、5都等待了1秒。若同時在list后面加ToList()方法后,會立即執(zhí)行所有返回值,耗時3秒多,反之瞬間執(zhí)行完成。

結(jié)論:每個yield return可以理解為一個待執(zhí)行方法,當(dāng)調(diào)用到這個對象時才執(zhí)行,而且這個“執(zhí)行方法”作用域是上一個yield到當(dāng)前yield之間。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容