<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      C#使用yield關鍵字提升迭代性能與效率

      前言

      yield關鍵字在C#中簡化了數據迭代的方式,實現了按需生成數據,自動維護迭代狀態,減少了內存占用,并允許在迭代時執行復雜邏輯。

      傳統迭代和yield迭代方式對比

      咱們來看看傳統迭代方式和yield關鍵字迭代方式對比,是否如傳說中的代碼實現起來更簡潔和高效:

              /// <summary>
              /// 傳統迭代方式和yield關鍵字迭代方式對比
              /// </summary>
              public static void IteratorComparisonRun()
              {
                  Console.WriteLine("迭代器方法使用yield關鍵字:");
                  foreach (var number in GetNumbersWithYield())
                  {
                      Console.WriteLine(number);
                  }

                  Console.WriteLine("傳統迭代方法返回一個List<int>");
                  var numbers = GetNumbersWithoutYield();
                  foreach (var number in numbers)
                  {
                      Console.WriteLine(number);
                  }
              }

              /// <summary>
              /// 迭代器方法使用yield關鍵字
              /// </summary>
              /// <returns></returns>
              public static IEnumerable<int> GetNumbersWithYield()
              {
                  for (int i = 0; i < 6; i++)
                  {
                      yield return i;
                  }
              }

              /// <summary>
              /// 傳統迭代方法返回一個List<int>
              /// </summary>
              /// <returns></returns>
              public static List<int> GetNumbersWithoutYield()
              {
                  var numbers = new List<int>();
                  for (int i = 0; i < 6; i++)
                  {
                      numbers.Add(i);
                  }
                  return numbers;
              }

      輸出結果:

      yield延遲加載按需獲取數據

      yield關鍵字可以通過延遲執行的方式,僅在實際需要時生成數據,從而提高了性能和效率。

              /// <summary>
              /// yield關鍵字延遲加載按需獲取數據
              /// </summary>
              public static void LazyLoadingRun()
              {
                  Console.WriteLine("yield延遲加載按需獲取數據 開始...");

                  foreach (var number in GetEvenNumbers(11))
                  {
                      Console.WriteLine($"返回值 === {number} ===");
                      Thread.Sleep(500);
                  }

                  Console.WriteLine("yield延遲加載按需獲取數據 結束...");
              }

              /// <summary>
              /// 使用yield返回偶數的迭代器方法
              /// </summary>
              /// <returns></returns>
              public static IEnumerable<int> GetEvenNumbers(int number)
              {
                  for (int i = 1; i < number; i++)
                  {
                      Console.WriteLine($"Yielding {i}");
                      if (i % 2 == 0)
                      {
                          yield return i; //只在需要時生成偶數
                      }
                  }
              }

      輸出結果:

      yield break顯式示迭代結束

      yield break:顯式示迭代結束,如以下示例所示:

              public static void YieldBreakRun()
              {
                  Console.WriteLine(string.Join(" ", TakeWhilePositive(new int[] { 1, 3, 4, 5, -1, 3, 4 })));
                  //輸出:1 3 4 5

                  Console.WriteLine(string.Join(" ", TakeWhilePositive(new int[] { 9, 8, 7, 6, 5, -5, 88, 100 })));
                  //輸出:9 8 7 6 5
              }

              public static IEnumerable<int> TakeWhilePositive(IEnumerable<int> numbers)
              {
                  foreach (int n in numbers)
                  {
                      if (n > 0)
                      {
                          yield return n;
                      }
                      else
                      {
                          yield break;
                      }
                  }
              }

      什么情況不能使用yield關鍵字

      • 帶有 in、ref 或 out 參數的方法。
      • Lambda 表達式和匿名方法。
      • 在 C# 13 之前,yield 在具有 unsafe 塊的任何方法中都無效。從 C# 13 開始,可以在包含 unsafe 塊的方法中使用 yield,但不能在 unsafe 塊中使用。
      • 不能在catch和finally塊中使用yield return和yield break。
      • 不能在具有catch塊的try塊中使用yield return和yield break。
      • 可以在只有finally塊的try塊中使用yield return和yield break。

      完整示例代碼

      參考文章

      posted @ 2025-01-22 08:00  追逐時光者  閱讀(1637)  評論(1)    收藏  舉報
      主站蜘蛛池模板: 亚洲色最新高清AV网站| 久久精品A一国产成人免费网站| 欧美亚洲h在线一区二区| 疯狂做受XXXX高潮国产| 一二三三免费观看视频| 重口SM一区二区三区视频| 久久人人爽人人爽人人片av| 亚洲综合91社区精品福利| 激情综合网激情五月激情| 人妻18毛片A级毛片免费看| 灌南县| 亚洲精品无码av天堂| 亚洲成av人片在www鸭子| 成人精品一区日本无码网| 日韩丝袜欧美人妻制服| 国产精品亚洲欧美大片在线看| 五月婷婷开心中文字幕| 国产欧美日韩精品丝袜高跟鞋| 久久av高潮av喷水av无码| 成人免费无遮挡在线播放| 大地资源免费视频观看| 国产精品久久无码不卡黑寡妇| 房东老头揉捏吃我奶头影片| 无码人妻斩一区二区三区| 61精品人妻一区二区三区| 内射干少妇亚洲69xxx| 欧洲精品码一区二区三区| 99精品国产综合久久久久五月天| 亚洲AV高清一区二区三区尤物| caoporn免费视频公开| 国产一区二区三区高清视频 | 精品无码国产不卡在线观看| 色综合久久夜色精品国产| 成全影视大全在线观看| 亚洲中文字幕无码一久久区| 亚洲天堂成人一区二区三区| 制服丝袜国产精品| 在国产线视频A在线视频| 天堂久久天堂av色综合| 色噜噜亚洲精品中文字幕| 亚洲人成绝网站色www|