程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#中yield return用法剖析

C#中yield return用法剖析

編輯:C#入門知識

C#中yield return用法剖析。本站提示廣大學習愛好者:(C#中yield return用法剖析)文章只能為提供參考,不一定能成為您想要的結果。以下是C#中yield return用法剖析正文


本文實例講述了C#中yield return用法,而且比較了應用yield return與不應用yield return的情形,以便讀者更好的停止懂得。詳細以下:

yield症結字用於遍歷輪回中,yield return用於前往IEnumerable<T>,yield break用於終止輪回遍歷。

有如許的一個int類型的聚集:

static List<int> GetInitialData()
{
  return new List<int>(){1,2,3,4};
}

須要打印出一切值年夜於2的元素。

不應用yield return的完成

static IEnumerable<int> FilterWithoutYield()
{
  List<int> result = new List<int>();
  foreach (int i in GetInitialData())
  {
 if (i > 2)
 {
   result.Add(i);
 } 
  }
  return result;
}

客戶端挪用:

static void Main(string[] args)
{
  foreach (var item in FilterWithoutYield())
  {
 Console.WriteLine(item);
  }
  Console.ReadKey(); 
}

輸入成果:3,4

應用yeild return完成

static IEnumerable<int> FilterWithYield()
{
  foreach (int i in GetInitialData())
  {
 if (i > 2)
 {
   yield return i;
 }
  }
  yield break;
  Console.WriteLine("這裡的代碼不履行");
}

客戶端挪用:

static void Main(string[] args)
{
  foreach (var item in FilterWithYield())
  {
 Console.WriteLine(item);
  }
  Console.ReadKey(); 
}

輸入成果:3,4

總結:

經由過程單步驟試發明:

固然2種辦法的輸入成果是一樣的,但運作進程迥然分歧。第一種辦法,是把成果集全體加載到內存中再遍歷;第二種辦法,客戶端每挪用一次,yield return就前往一個值給客戶端,是"按需供應"。

第一種辦法,客戶端挪用進程年夜致為:

應用yield return,客戶端挪用進程年夜致為:

應用yield return為何能包管每次輪回遍歷的時刻早年一次停滯的處所開端履行呢?

--由於,編譯器會生成一個狀況機來保護迭代器的狀況。

簡略地說,當願望獲得一個IEnumerable<T>類型的聚集,而不想把數據一次性加載到內存,便可以斟酌應用yield return完成"按需供應"。

願望本文所述對年夜家的C#法式設計有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved