2013-03-01 72 views
-1

如何在下面的情況下重置IEnumerator實例? (e.Reset()拋出NotImplementedException)如何在以下情況下重置IEnumerator實例

void Main() 
    { 
     IEnumerator<string> e = new List<string> { "a", "b", "c" }.Select(o => o).GetEnumerator(); 

     while(e.MoveNext()) 
     { 
      Console.WriteLine(e.Current); 
     } 

     if( 
      //some condition 
     ) 
     { 
      e.Reset(); 

      while(e.MoveNext()) 
      { 
       //Do something else with e.Current 
      } 
     } 

    } 
+3

此外:[爲什麼Enumerator類的Reset()方法必須拋出NotSupportedException()?](http://stackoverflow.com/questions/1468170/why-the-reset-method-on-enumerator-類必須拋出-A-NotSupportedException異常) – sloth 2013-03-01 10:20:36

回答

2

由於該方法的 '實施' 看起來東西這樣的:

public void Reset() { 
    throw new NotImplementedException(); 
} 

僅供參考from MSDN

的復位方法提供了COM互操作性。它不一定需要執行;相反,實施者可以簡單地拋出一個NotSupportedException。

在這種情況下,所使用的例外類型是該建議的偏差。

0

望着documentation的解釋是這樣的:提供了COM互操作

Reset方法。它不一定需要執行;相反,實施者可以簡單地拋出一個NotSupportedException。

給實現所有這些都需要重置必須導致對枚舉相同的狀態 。首選的實現方法是將 枚舉器移至集合的開頭,並在第一個元素 之前。如果集合自創建枚舉器以來已被修改爲 ,則這將使枚舉器無效,這與 MoveNext和Current一致。

相關問題