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

C#中yield return用法分析

 更新時(shí)間:2014年09月05日 09:45:27   投稿:shichen2014  
這篇文章主要介紹了C#中yield return用法,對(duì)比使用yield return與不使用yield return的流程,更直觀的分析了yield return的用法,需要的朋友可以參考下

本文實(shí)例講述了C#中yield return用法,并且對(duì)比了使用yield return與不使用yield return的情況,以便讀者更好的進(jìn)行理解。具體如下:

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ò)程大致為:

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

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

--因?yàn)?,編譯器會(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)"按需供給"。

希望本文所述對(duì)大家的C#程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • C# 超高面試題收集整理

    C# 超高面試題收集整理

    C# 超高面試題,學(xué)習(xí)c sharp的朋友可以看下,有說(shuō)明地方的不足。是不是所有問(wèn)題都有自己的解決方法。
    2010-03-03
  • WCF實(shí)現(xiàn)的計(jì)算器功能實(shí)例

    WCF實(shí)現(xiàn)的計(jì)算器功能實(shí)例

    這篇文章主要介紹了WCF實(shí)現(xiàn)的計(jì)算器功能,結(jié)合具體實(shí)例形式較為詳細(xì)的分析了WCF實(shí)現(xiàn)計(jì)算器功能的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2017-06-06
  • 總結(jié)C#處理異常的方式

    總結(jié)C#處理異常的方式

    這篇文章介紹了C#處理異常的方式總結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • C#獲取圖片的后綴名解析

    C#獲取圖片的后綴名解析

    這篇文章主要介紹了C#獲取圖片的后綴名解析,需要的朋友可以參考下
    2014-02-02
  • C#中類與接口的區(qū)別個(gè)人總結(jié)

    C#中類與接口的區(qū)別個(gè)人總結(jié)

    這篇文章主要介紹了C#中類與接口的區(qū)別個(gè)人總結(jié),本文講解了類與接口的區(qū)別、接口的用處主要體現(xiàn)在下面幾個(gè)方面、一些接口的疑問(wèn)等內(nèi)容,需要的朋友可以參考下
    2015-06-06
  • c#使用filesystemwatcher監(jiān)視文件系統(tǒng)的變化

    c#使用filesystemwatcher監(jiān)視文件系統(tǒng)的變化

    對(duì)于一個(gè)文件夾的改變,C#這邊有自己的類來(lái)實(shí)現(xiàn),我們不需要關(guān)心它的內(nèi)部實(shí)現(xiàn)機(jī)制,不需要關(guān)心它底層調(diào)用哪些API,我們只需要關(guān)心如何去調(diào)用它,如何讓它幫助我們記錄文件夾的修改情況即可,下面我們就實(shí)現(xiàn)它
    2014-01-01
  • 詳解c#與python的交互方式

    詳解c#與python的交互方式

    這篇文章主要介紹了詳解c#與python的交互方式,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-04-04
  • 利用C#實(shí)現(xiàn)記事本的功能的示例代碼

    利用C#實(shí)現(xiàn)記事本的功能的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)簡(jiǎn)單的記事本的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • C# 從Excel讀取數(shù)據(jù)向SQL server寫入

    C# 從Excel讀取數(shù)據(jù)向SQL server寫入

    這篇文章主要介紹了C# 從Excel讀取數(shù)據(jù)向SQL server寫入的方法,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-03-03
  • C#為配置文件加密的實(shí)現(xiàn)方法

    C#為配置文件加密的實(shí)現(xiàn)方法

    這篇文章主要介紹了C#為配置文件加密的實(shí)現(xiàn)方法,可實(shí)現(xiàn)對(duì)配置文件中的敏感信息進(jìn)行加密,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-10-10

最新評(píng)論

兰坪| 巍山| 平陆县| 鸡泽县| 黄梅县| 苏州市| 龙州县| 潢川县| 天台县| 石首市| 固始县| 洛隆县| 通辽市| 疏附县| 都安| 肥东县| 株洲县| 屏南县| 龙州县| 宜州市| 娱乐| 永州市| 宁津县| 和林格尔县| 陇南市| 库车县| 郸城县| 武乡县| 娱乐| 随州市| 鄯善县| 扬州市| 玛纳斯县| 神木县| 安岳县| 深泽县| 株洲县| 双桥区| 西畴县| 曲阳县| 唐海县|