-1

在以下情况下如何重置 IEnumerator 实例?(e.Reset() 抛出 NotImplementedException)

    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
           }
       }

    }
4

2 回答 2

2

因为该方法的“实现”看起来这样:

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

从 MSDN参考:

为 COM 互操作性提供了 Reset 方法。它不一定需要实施;相反,实现者可以简单地抛出 NotSupportedException。

在这种情况下,使用的异常类型是该建议的偏差。

于 2013-03-01T10:20:58.123 回答
0

查看文档的解释是这样的:

为 COM 互操作性提供了 Reset 方法。它不一定需要实施;相反,实现者可以简单地抛出 NotSupportedException。

对实施者的说明 所有对 Reset 的调用都必须导致枚举数的状态相同。首选的实现是将枚举数移动到集合的开头,在第一个元素之前。如果在创建枚举器后集合已被修改,这将使枚举器无效,这与 MoveNext 和 Current 一致。

于 2013-03-01T10:22:58.270 回答