still trying to find where i would use the ‘yield’ keyword in a real situation.
I see this thread on the subject
What is the yield keyword used for in C#?
but in the accepted answer, they have this as an example where someone is iterating around Integers()
public IEnumerable<int> Integers() { yield return 1; yield return 2; yield return 4; yield return 8; yield return 16; yield return 16777216; }
but why not just use
list<int>
here instead. seems more straightforward..
If you build and return a List (say it has 1 million elements), that’s a big chunk of memory, and also of work to create it.
Sometimes the caller may only want to know what the first element is. Or they might want to write them to a file as they get them, rather than building the whole list in memory and then writing it to a file.
That’s why it makes more sense to use yield return. It doesn’t look that different to building the whole list and returning it, but it’s very different because the whole list doesn’t have to be created in memory before the caller can look at the first item on it.
When the caller says:
Each time the loop requires a new i, it runs a bit more of the code in Integers(). The code in that function is ‘paused’ when it hits a
yield returnstatement.