【问题标题】:How to reset an IEnumerator instance in below case [duplicate]在以下情况下如何重置 IEnumerator 实例[重复]
【发布时间】:2013-03-01 10:17:59
【问题描述】:

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

    }

【问题讨论】:

标签: c# .net


【解决方案1】:

因为方法的“实现”看起来像这样某种东西

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

供参考from MSDN

为 COM 互操作性提供了 Reset 方法。它不是 必然需要实施;相反,实施者可以 只需抛出 NotSupportedException。

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

【讨论】:

    【解决方案2】:

    documentation的解释是这样的:

    为 COM 互操作性提供了 Reset 方法。它不是 必然需要实施;相反,实施者可以 只需抛出 NotSupportedException。

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

    【讨论】:

      猜你喜欢
      • 2010-12-26
      • 1970-01-01
      • 2020-07-15
      • 2021-09-22
      • 1970-01-01
      • 1970-01-01
      • 2013-04-16
      • 1970-01-01
      • 2017-07-27
      相关资源
      最近更新 更多