如何在以下情况下重置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
}
}
}
因为该方法的'实现'看起来类似于:
public void Reset() {
throw new NotImplementedException();
}
参考MSDN:
Reset方法是为COM互操作性提供的。事实并非如此必须被执行;相反,实现者可以只需抛出NotSupportedException。
在这种情况下,使用的异常类型是该建议的偏差
看一下文档,解释是这样的:
Reset方法是为COM互操作性提供的。事实并非如此必须被执行;相反,实现者可以只需抛出NotSupportedException。
和
对实现者的注意事项所有对Reset的调用必须导致相同的状态用于枚举数。首选的实现是移动枚举数到集合的开头,在第一个之前元素。这将使枚举数无效,如果该集合已自创建枚举数以来已修改,这与MoveNext和Current.