yield

C#知識系列

yield是用於迭代,yield return用於返回IEnumerable<T>,yield break用於終止

先開始定義初始化資料

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

常用的code處理

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

上方是比較常用的方式進行處理是foreach處理完集合中所有元素,再返回

下方則是

        static IEnumerable<int> FilterWithYield()
        {
            foreach (int item in InitialData())
            {
                if (item>2)
                {
                    yield return item;
                }
             
            }
            yield break;
        }

 clinet方式

            foreach (var i in FilterWithYield())
            {
                Console.WriteLine(i);  //3,4
            }

第一種方法是把集合全部加載內存在foreach處理;第二種,clinet 調用一次,yield return就返回一個值給clinet。

簡單來說,如果不要把數據一次加載內存裡面,可以考慮用yield return實現

元哥的筆記