<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          C# yield用法

          共 2265字,需瀏覽 5分鐘

           ·

          2022-07-07 21:14


          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

          /// <summary>

          /// 返回大于5的值

          /// </summary>

          /// <param name="source"></param>

          /// <returns></returns>

          public static IEnumerable<int> FilterList(this IEnumerable<int> source)

          {

              List<int> numList = new List<int>();

              foreach (int num in source)

              {

                  if (num > 5)

                  {

                      numList.Add(num);

                  }

              }

              return numList;

          }

          這種寫(xiě)法很普通,寫(xiě)起來(lái)也很容易理解


          yield寫(xiě)法

          1

          2

          3

          4

          5

          6

          7

          8

          9

          10

          11

          12

          13

          14

          15

          16

          /// <summary>

          /// 返回大于5的值

          /// </summary>

          /// <param name="source"></param>

          /// <returns></returns>

          public static IEnumerable<int> FilterNum(this IEnumerable<int> source)

          {

              foreach (int num in source)

              {

                  if (num > 5)

                  {

                      yield return num;

                  }

              }

              yield break;

          }

          yield寫(xiě)法很明顯比普通寫(xiě)法代碼更加簡(jiǎn)潔,性能也更高

          普通寫(xiě)法是將滿(mǎn)足條件的全部查詢(xún)出來(lái)保存到一個(gè)臨時(shí)變量中,最后全部返回出去

          客戶(hù)端調(diào)用

          1

          2

          3

          4

          5

          var list = numList.FilterNum();

          foreach (int item in list2)

          {

           

          }

          在執(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)鍵字


          瀏覽 28
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日韩欧美大鸡巴 | 国产一区二区三区18 | 男女啪啪网 | 青青草成人在线男人的天堂 | 毛片激情|