欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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é):

通過單步調(diào)試發(fā)現(xiàn):

雖然2種方法的輸出結(jié)果是一樣的,但運(yùn)作過程迥然不同。第一種方法,是把結(jié)果集全部加載到內(nèi)存中再遍歷;第二種方法,客戶端每調(diào)用一次,yield return就返回一個(gè)值給客戶端,是"按需供給"。

第一種方法,客戶端調(diào)用過程大致為:

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

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

--因?yàn)?,編譯器會(huì)生成一個(gè)狀態(tài)機(jī)來維護(hù)迭代器的狀態(tài)。

簡單地說,當(dāng)希望獲取一個(gè)IEnumerable<T>類型的集合,而不想把數(shù)據(jù)一次性加載到內(nèi)存,就可以考慮使用yield return實(shí)現(xiàn)"按需供給"。

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

您可能感興趣的文章:

相關(guān)文章

  • C#堆排序?qū)崿F(xiàn)方法

    C#堆排序?qū)崿F(xiàn)方法

    這篇文章主要介紹了C#堆排序?qū)崿F(xiàn)方法,實(shí)例分析了C#對(duì)排序的實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-04-04
  • C#結(jié)構(gòu)體特性實(shí)例分析

    C#結(jié)構(gòu)體特性實(shí)例分析

    這篇文章主要介紹了C#結(jié)構(gòu)體特性,以實(shí)例形式較為詳細(xì)的分析了C#結(jié)構(gòu)體的功能、定義及相關(guān)特性,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-09-09
  • C#基于NPOI操作Excel

    C#基于NPOI操作Excel

    這篇文章介紹了C#基于NPOI操作Excel的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • C#文件上傳的簡單實(shí)現(xiàn)

    C#文件上傳的簡單實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了C#文件上傳的簡單實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • C# .net core HttpClientFactory用法及說明

    C# .net core HttpClientFactory用法及說明

    這篇文章主要介紹了C# .net core HttpClientFactory用法及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • C#利用異步委托實(shí)現(xiàn)獲取線程返回值

    C#利用異步委托實(shí)現(xiàn)獲取線程返回值

    一般來說,異步委托主要用于解決 ThreadPool.QueueUserWorkItem 沒有提供獲取線程執(zhí)行完成后的返回值問題,下面我們就來學(xué)習(xí)一下C#如何利用異步委托實(shí)現(xiàn)獲取線程返回值吧
    2023-12-12
  • C#多線程學(xué)習(xí)之(五)使用定時(shí)器進(jìn)行多線程的自動(dòng)管理

    C#多線程學(xué)習(xí)之(五)使用定時(shí)器進(jìn)行多線程的自動(dòng)管理

    這篇文章主要介紹了C#多線程學(xué)習(xí)之使用定時(shí)器進(jìn)行多線程的自動(dòng)管理,實(shí)例分析了C#使用timer定時(shí)器類實(shí)現(xiàn)針對(duì)多線程的自動(dòng)管理功能,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • C# 打開藍(lán)牙設(shè)置界面的兩種方法

    C# 打開藍(lán)牙設(shè)置界面的兩種方法

    這篇文章主要介紹了C# 打開藍(lán)牙設(shè)置界面的兩種方法,文中講解非常細(xì)致,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • Win10下C# DateTime出現(xiàn)星期幾問題的解決方法

    Win10下C# DateTime出現(xiàn)星期幾問題的解決方法

    這篇文章主要介紹了Win10下C# DateTime出現(xiàn)星期幾問題的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • 教你創(chuàng)建一個(gè)帶診斷工具的.NET鏡像

    教你創(chuàng)建一個(gè)帶診斷工具的.NET鏡像

    本文編寫的初衷是因?yàn)樵谌豪镉泻芏嘈』锇橛龅缴a(chǎn)環(huán)境性能問題的時(shí)候,.NET的runtime鏡像中沒有帶一些工具,安裝和使用起來很麻煩,所以分享一些我們公司內(nèi)部一些技巧,對(duì).NET鏡像帶診斷工具相關(guān)知識(shí)感興趣的朋友一起看看吧
    2022-07-07

最新評(píng)論