C# Yield的使用
阿新 • • 發佈:2020-05-28
yield關鍵字用於遍歷迴圈中,yield return用於返回IEnumerable
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using log4net; namespace Test { class Program { static void Main(string[] args) { List<int> list = new List<int>(); for (int i = 1; i < 101; i++) list.Add(i); //獲取偶數集合 //TestMethod(GetAllEvenNumber(list)); TestMethod(GetAllEvenNumberByYield(list)); Console.ReadLine(); } public static void TestMethod(IEnumerable<int> param) { foreach (var item in param) { Console.WriteLine(item);//輸出偶數集合 } } public static IEnumerable<int> GetAllEvenNumber(IEnumerable<int> param) { List<int> result = new List<int>(); foreach (var item in param) { if (item % 2 == 0) { result.Add(item); } } return result; } public static IEnumerable<int> GetAllEvenNumberByYield(IEnumerable<int> param) { foreach (var item in param) { if (item % 2 == 0) { yield return item; } } } } }
GetAllEvenNumber方法,是把結果集全部載入到記憶體中再遍歷;GetAllEvenNumberByYield方法,客戶端每呼叫一次,yield return就返回一個值給客戶端,是"按需供給",這樣有個好處,我們假如有1000000個數據,我們需要得到裡面的耦合,當我們通過這個方法得到一個耦合會立馬顯示在控制檯上。而不是等很久也就把全部偶數都查詢到存入集合當中,然後在一一遍歷輸出。這個好處是很大的。比如我們使用者可能就看資料開始肯定不是全部值需要部分就可以,看完這些在看後面的,這樣資料會讓覺得顯示沒有延遲