Довольно редко, если честно. Единственный раз, когда я видел, что он использовал этот способ, это когда по особой причине в методе GetEnumerator()
(до запуска механизма блока итераторов), но все еще нужен блок итератора для фактическая реализация, т.е.
public IEnumerator<T> GetEnumerator()
{
if (someScenario) return SomethingSpecialPerhapsEmptyArrayEnumerator();
if (anotherScenario) ThrowSomeException();
return DoTheThing();
}
private IEnumerator<T> DoTheThing()
{
// ... yield return
}