麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

C#yieldreturn用法與解析

2019-11-14 13:42:44
字體:
供稿:網(wǎng)友

C# yield return 用法與解析

本文參考自:http://www.jb51.net/article/54810.htm

 

 當(dāng)初沒有認真理解 yield 這個關(guān)鍵字,現(xiàn)在又遇到了依舊不理解,為了以后不再為了 yield 困惑,決定好好研究一下 yield 的用法與意義:

yield 從字面上理解有“退位,屈服”的意思,轉(zhuǎn)一下彎就理解成“權(quán)限轉(zhuǎn)移”,也就是將控制權(quán)交給別人,在這里就是把集合里滿足條件(如果沒有過濾條件,就是全體)的個體的操作轉(zhuǎn)移給另一個對象。

    class PRogram    {        static void Main(string[] args)        {            foreach (var item in FilterWithoutYield)            {                Console.WriteLine(item);            }            Console.ReadKey();         }        //申明屬性,定義數(shù)據(jù)來源        public static List<int> Data        {            get            {                return new List<int>(){1,2,3,4,5,6,7,8};            }        }        //申明屬性,過濾器(不適用yield)        public static IEnumerable<int> FilterWithoutYield        {            get            {                var result = new List<int>();                foreach (var i in Data)                {                    if (i > 4)                        result.Add(i);                }                return result;            }        }    }

可以看到如果不用yield,要返回大于4的所有的樹,就要到另一個集合。而用yield的情況下就不必如此麻煩了:

        //申明屬性,過濾器(使用yield)        public static IEnumerable<int> FilterWithoutYield        {            get            {                foreach (var i in Data)                {                    if (i > 4)                        yield return i;                }            }        }

為什么會這樣呢?

通過單步調(diào)試發(fā)現(xiàn):

雖然2種方法的輸出結(jié)果是一樣的,但運作過程迥然不同。第一種方法,是把結(jié)果集全部加載到內(nèi)存中再遍歷;第二種方法,客戶端每調(diào)用一次,yield return就返回一個值給客戶端,是"按需供給"。

第一種方法,客戶端調(diào)用過程大致為:

使用yield return,客戶端調(diào)用過程大致為:

 

使用yield return為什么能保證每次循環(huán)遍歷的時候從前一次停止的地方開始執(zhí)行呢?

--因為,編譯器會生成一個狀態(tài)機來維護迭代器的狀態(tài)。

簡單地說,當(dāng)希望獲取一個IEnumerable<T>類型的集合,而不想把數(shù)據(jù)一次性加載到內(nèi)存,就可以考慮使用yield return實現(xiàn)"按需供給"。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产一级二级在线播放 | 色吧综合网 | 成年免费视频黄网站在线观看 | 久久久久北条麻妃免费看 | 欧洲精品视频在线观看 | 色七七网站 | 欧美日韩在线视频一区 | av在线成人 | 日韩精品久久久久久久九岛 | 欧美成人一区免费视频 | 精品国产一区二区三区久久久狼牙 | 中国免费一级毛片 | 日韩av成人 | 欧美久久一区 | 亚洲一区二区三区高清 | 91成人久久 | 成人午夜亚洲 | 麻豆视频在线免费观看 | 老a影视网站在线观看免费 国产精品久久久久久久久久尿 | 成人毛片100部 | 成人免费观看在线 | 777午夜精品视频在线播放 | 斗破苍穹在线免费 | 高清国产在线 | 欧美在线观看视频一区 | 免费久久久久 | 亚洲国产精品500在线观看 | 少妇色诱麻豆色哟哟 | 暖暖免费观看高清完整版电影 | 欧美一级免费在线观看 | 天天艹综合 | 国产精品免费成人 | 久久久日韩精品一区二区 | 精品国产一区二区三区四区阿崩 | 国产精品久久久久久久久久了 | 国产精品久久国产精麻豆96堂 | 欧美videofree性欧美另类 | 日韩黄色免费在线观看 | 久草在线观看资源 | 免费观看高清视频网站 | 一级免费特黄视频 |