Come descritto su MSDN il metodo reset è fornito solo per interoperabilità con il mondo COM; testualmente
The Reset method is provided for COM interoperability. It does not necessarily need to be implemented; instead, the implementer can simply throw a NotSupportedException.
Come esempio provate ad eseguire questo semplice test:
class test { public void start() { this.Reset(this.GetItems()); this.Reset(this.GetYieldItems()); } private void Reset<T>(IEnumerable<T> items) { items.GetEnumerator().Reset(); } private IEnumerable<string> GetItems() { return new List<string>(new string[] { "0", "1", "2" }); } private IEnumerable<string> GetYieldItems() { for (int i = 0; i < 3; i++) { yield return i.ToString(); } } } Lanciare il test con new test().start() |
Il metodo GetYieldItems lancia l'eccezione su citata proprio perché l'implementazione fornita dal framework dello yield, generata a compile time, non prevede il metodo Reset (Reflector conferma).