C# yield用法
yield 關(guān)鍵字向編譯器指示它所在的方法是迭代器塊
yield 關(guān)鍵字與 return 關(guān)鍵字結(jié)合使用,向枚舉器對(duì)象提供值。
這是一個(gè)返回值,例如,在 foreach 語(yǔ)句的每一次循環(huán)中返回的值。
yield 關(guān)鍵字也可與 break 結(jié)合使用,表示迭代結(jié)束。
例子:
yield return <expression>;
yield break;
在 yield return 語(yǔ)句中,將計(jì)算 expression 并將結(jié)果以值的形式返回給枚舉器對(duì)象;expression 必須可以隱式轉(zhuǎn)換為 yield 類(lèi)型的迭代器。
這里看一個(gè)例子:(返回集合中大于5的值)
普通寫(xiě)法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
這種寫(xiě)法很普通,寫(xiě)起來(lái)也很容易理解
yield寫(xiě)法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
yield寫(xiě)法很明顯比普通寫(xiě)法代碼更加簡(jiǎn)潔,性能也更高
普通寫(xiě)法是將滿(mǎn)足條件的全部查詢(xún)出來(lái)保存到一個(gè)臨時(shí)變量中,最后全部返回出去
客戶(hù)端調(diào)用
1 2 3 4 5 |
|
在執(zhí)行numList.FilterNum()的時(shí)候并不會(huì)返回結(jié)果,也不會(huì)進(jìn)入FilterNum()方法,只有在遍歷(foreach)的時(shí)候,才會(huì)進(jìn)入FilterNum()方法,而且每遍歷一次進(jìn)入一次
yield return 每次遇到符合條件的都會(huì)立即返回對(duì)應(yīng)的值出去,遇到y(tǒng)ield break會(huì)結(jié)束迭代器
yield 在.net framework中是非常普遍的
使用Linq分頁(yè)技術(shù)我們通常都是使用Skip和Take關(guān)鍵字

