If I use yield instead of manually creating an IEnumerator, is it possible to implement IEnumerator.Reset?
No, it is not possible. When the C# compiler processes an iterator (a method that contains a yield
statement), the compiler generates a class that implements IEnumerable and IEnumerator. The generated class' implementation of Reset just throws a NotSupportedException. There is no way to influence this in current versions of C#.
Instead, your calling code will need to request a new enumerator, i.e. begin a new foreach loop. Or you will need to forgo the language support (the yield
statement) and write your own class which implements IEnumerator.