Talking to an ex colleague of mine this evening about some use cases for yield, it’s quite a handy little keyword, i often use it for splitting a large collection into smaller ones (Chunk).
Efficiency
I was presented with another use for yield.
Take a third party API that takes an IEnumerable of objects that are expensive to create,
we can see that there is an early exit strategy so we may not need all items in the enumeration.
Now lets say we have 3 implementations of this interface
trivial i know, but assume we don’t know if they return null or not at compile time.
Now here’s a nice way of passing all of the above to a third party API and only incur the construction hit as and if when they get enumerated.
Using the trivial logic outlined here, ExpensiveFactoryC will never get constructed.