最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#使用yield關(guān)鍵字實(shí)現(xiàn)提升迭代性能與效率

 更新時(shí)間:2025年01月22日 08:22:16   作者:追逐時(shí)光者  
yield關(guān)鍵字在C#中簡化了數(shù)據(jù)迭代的方式,實(shí)現(xiàn)了按需生成數(shù)據(jù),自動(dòng)維護(hù)迭代狀態(tài),本文主要來聊聊如何使用yield關(guān)鍵字實(shí)現(xiàn)提升迭代性能與效率,感興趣的可以了解下

前言

yield關(guān)鍵字在C#中簡化了數(shù)據(jù)迭代的方式,實(shí)現(xiàn)了按需生成數(shù)據(jù),自動(dòng)維護(hù)迭代狀態(tài),減少了內(nèi)存占用,并允許在迭代時(shí)執(zhí)行復(fù)雜邏輯。

傳統(tǒng)迭代和yield迭代方式對(duì)比

咱們來看看傳統(tǒng)迭代方式和yield關(guān)鍵字迭代方式對(duì)比,是否如傳說中的代碼實(shí)現(xiàn)起來更簡潔和高效:

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

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

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

        /// <summary>
        /// 傳統(tǒng)迭代方法返回一個(gè)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;
        }

輸出結(jié)果:

yield延遲加載按需獲取數(shù)據(jù)

yield關(guān)鍵字可以通過延遲執(zhí)行的方式,僅在實(shí)際需要時(shí)生成數(shù)據(jù),從而提高了性能和效率。

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

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

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

        /// <summary>
        /// 使用yield返回偶數(shù)的迭代器方法
        /// </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; //只在需要時(shí)生成偶數(shù)
                }
            }
        }

輸出結(jié)果:

yield break顯式示迭代結(jié)束

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

        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關(guān)鍵字

帶有 in、ref 或 out 參數(shù)的方法。

Lambda 表達(dá)式和匿名方法。

在 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。

到此這篇關(guān)于C#使用yield關(guān)鍵字實(shí)現(xiàn)提升迭代性能與效率的文章就介紹到這了,更多相關(guān)C# yield關(guān)鍵字內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#可變參數(shù)params示例詳解

    C#可變參數(shù)params示例詳解

    params是c#的一個(gè)關(guān)鍵字,用用漢語來說的話叫可變參數(shù),這里的可變,不是說的類型可變,而是指的個(gè)數(shù)可變,這是c#的一個(gè)基礎(chǔ)關(guān)鍵字,相信大家都有一定的了解,本篇文章就來大致的說一下C#可變參數(shù)params
    2022-02-02
  • C#接口(Interface)用法分析

    C#接口(Interface)用法分析

    這篇文章主要介紹了C#接口(Interface)用法,較為詳細(xì)的分析了C#中接口的功能、實(shí)現(xiàn)及使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03
  • C# wpf 實(shí)現(xiàn)窗口任意區(qū)域點(diǎn)擊拖動(dòng)

    C# wpf 實(shí)現(xiàn)窗口任意區(qū)域點(diǎn)擊拖動(dòng)

    在wpf要實(shí)現(xiàn)此功能簡單形式還是比較容易的,但是有一些細(xì)節(jié)需要專門處理,比如與按鈕的點(diǎn)擊事件沖突問題,解決事件沖突問題后拖動(dòng)的靈敏度,可復(fù)用性等,這篇文章主要介紹了C# wpf 實(shí)現(xiàn)窗口任意區(qū)域點(diǎn)擊拖動(dòng),需要的朋友可以參考下
    2024-03-03
  • C# BinaryReader實(shí)現(xiàn)讀取二進(jìn)制文件

    C# BinaryReader實(shí)現(xiàn)讀取二進(jìn)制文件

    在 C# 以二進(jìn)制形式讀取數(shù)據(jù)時(shí)使用的是 BinaryReader 類。本文介紹了C# BinaryReader實(shí)現(xiàn)讀取二進(jìn)制文件,感興趣的可以了解一下
    2021-06-06
  • C#中DateTime的格式符的實(shí)現(xiàn)示例

    C#中DateTime的格式符的實(shí)現(xiàn)示例

    本文介紹了C#中DateTime格式符的使用方法,分為預(yù)定義格式和自定義格式兩類,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-12-12
  • C#借助Spire.Doc實(shí)現(xiàn)Word表格自動(dòng)排版

    C#借助Spire.Doc實(shí)現(xiàn)Word表格自動(dòng)排版

    在日常開發(fā)中,利用C#自動(dòng)化生成Word報(bào)告是一項(xiàng)常見需求,本文將介紹使用 Spire.Doc for .NET 組件,通過C#代碼精確設(shè)置 C# Word 表格列寬,希望對(duì)大家有所幫助
    2026-02-02
  • C#表達(dá)式樹(Expression Trees)的使用

    C#表達(dá)式樹(Expression Trees)的使用

    本文主要介紹了C#表達(dá)式樹(Expression Trees)的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-06-06
  • MessageBox的Buttons和三級(jí)聯(lián)動(dòng)效果

    MessageBox的Buttons和三級(jí)聯(lián)動(dòng)效果

    這篇文章主要介紹了MessageBox的Buttons和三級(jí)聯(lián)動(dòng)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-11-11
  • C#中ref關(guān)鍵字的用法

    C#中ref關(guān)鍵字的用法

    這篇文章介紹了C#中ref關(guān)鍵字的用法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • C#實(shí)現(xiàn)壓縮圖片為可控制的JPEG格式

    C#實(shí)現(xiàn)壓縮圖片為可控制的JPEG格式

    這篇文章主要為大家詳細(xì)介紹了使用C#實(shí)現(xiàn)將圖片壓縮為質(zhì)量可自己控制的JPEG的幾種方式,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2024-01-01

最新評(píng)論

吐鲁番市| 满城县| 深水埗区| 班戈县| 陕西省| 阳江市| 渝北区| 景德镇市| 繁昌县| 汾西县| 武邑县| 石河子市| 隆昌县| 攀枝花市| 井陉县| 大足县| 新巴尔虎右旗| 大足县| 彩票| 五常市| 辉县市| 黔江区| 外汇| 东至县| 河南省| 巴彦县| 侯马市| 平顺县| 沙雅县| 杭锦后旗| 通州区| 门头沟区| 青海省| 佛教| 宁南县| 泉州市| 洛阳市| 辛集市| 凤山县| 上饶县| 乌兰县|