C# yield 介紹

平時在存取資料時可能會類似下面的方式,會將資料整理完,儲存在清單中,再一次將整個清單回傳:
    
public IEnumerable<int> GetNumbers()
{
    var numbers = new List<int>();
    for (int i = 0; i < 100_000_000; i++)
    {
        numbers.Add(i);
    }

    return numbers;
}
    

在 C# 中回傳 IEnumerable 或 IEnumerator 時可以使用 yield 關鍵字,將資料直接回傳上一層直接處理,然後再繼續處理,不需要等到所有資料蒐集完畢再一次回傳,不只可以節省時間,還可以節省記憶體空間。

yield 範例:
    
public static IEnumerable<int> GetNumbers()
{
    for (int i = 0; i < 100_000_000; i++)
    {
        yield return i;
    }
}

    

不需要繼續執行也可以使用 yield break; 來達成平時的 return 跳出方法
    
yield break;
    

留言