如何在以下情况下重置IEnumerator实例

本文关键字:IEnumerator 实例 情况下 | 更新日期: 2023-09-27 18:01:46

如何在下面的情况下重置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
           }
       }
    }

如何在以下情况下重置IEnumerator实例

因为该方法的'实现'看起来类似于:

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

参考MSDN:

Reset方法是为COM互操作性提供的。事实并非如此必须被执行;相反,实现者可以只需抛出NotSupportedException。

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

看一下文档,解释是这样的:

Reset方法是为COM互操作性提供的。事实并非如此必须被执行;相反,实现者可以只需抛出NotSupportedException。

对实现者的注意事项所有对Reset的调用必须导致相同的状态用于枚举数。首选的实现是移动枚举数到集合的开头,在第一个之前元素。这将使枚举数无效,如果该集合已自创建枚举数以来已修改,这与MoveNext和Current.