国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

C#中,什么時(shí)候用yield return

2019-11-17 03:03:24
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

C#中,什么時(shí)候用yield return

yield關(guān)鍵字用于遍歷循環(huán)中,yield return用于返回IEnumerable<T>,yield break用于終止循環(huán)遍歷。

有這樣的一個(gè)int類型的集合:

static List<int> GetInitialData()        {            return new List<int>(){1,2,3,4};        }

需要打印出所有值大于2的元素。

不使用yield return的實(shí)現(xiàn)

static IEnumerable<int> FilterWithoutYield()        {            List<int> result = new List<int>();            foreach (int i in GetInitialData())            {                if (i > 2)                {                    result.Add(i);                }             }            return result;        }

客戶端調(diào)用:

static void Main(string[] args)        {            foreach (var item in FilterWithoutYield())            {                Console.WriteLine(item);            }            Console.ReadKey();         }

輸出結(jié)果:3,4

使用yeild return實(shí)現(xiàn)

static IEnumerable<int> FilterWithYield()        {            foreach (int i in GetInitialData())            {                if (i > 2)                {                    yield return i;                }            }            yield break;            Console.WriteLine("這里的代碼不執(zhí)行");        }

客戶端調(diào)用:

static void Main(string[] args)        {            foreach (var item in FilterWithYield())            {                Console.WriteLine(item);            }            Console.ReadKey();         }

輸出結(jié)果:3,4

總結(jié)

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

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

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

1

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

2

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

--因?yàn)椋幾g器會(huì)生成一個(gè)狀態(tài)機(jī)來(lái)維護(hù)迭代器的狀態(tài)。

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


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 荣成市| 峨眉山市| 封丘县| 鄂州市| 工布江达县| 旺苍县| 防城港市| 珲春市| 土默特左旗| 岫岩| 唐河县| 阜平县| 兴化市| 息烽县| 玉林市| 临武县| 准格尔旗| 浦县| 黑龙江省| 丽江市| 桐庐县| 沁水县| 博客| 广宁县| 东安县| 乐亭县| 增城市| 北安市| 凤凰县| 江口县| 安溪县| 镇坪县| 绍兴市| 舒城县| 介休市| 万源市| 土默特右旗| 平陆县| 额济纳旗| 郴州市| 公主岭市|