相关疑难解决方法(0)

我如何使用IEnumerator.Reset()?

如何正确地打电话IEnumerator.Reset

文件说:

Reset方法用于COM互操作性.它不一定需要实施; 相反,实施者可以简单地抛出一个NotSupportedException.

好的,这也就是说我不应该打电话给它吗?

它是如此诱人的使用流量控制例外:

using (enumerator = GetSomeExpensiveEnumerator())
{
    while (enumerator.MoveNext()) { ... }

    try { enumerator.Reset(); } //Try an inexpensive method
    catch (NotSupportedException)
    { enumerator = GetSomeExpensiveEnumerator(); } //Fine, get another one

    while (enumerator.MoveNext()) { ... }
}
Run Code Online (Sandbox Code Playgroud)

这是我们应该如何使用它?或者我们不打算从托管代码中使用它?

.net c# ienumerator

34
推荐指数
2
解决办法
9991
查看次数

List <T>的Reset方法的行为.Enumerator

遵循两种方法(一种使用IEnumerator<int>和其他用途List<int>.Enumerator)即使外观相同也会产生不同的结果.

static void M1()
{
  var list = new List<int>() { 1, 2, 3, 4 };
  IEnumerator<int> iterator = list.GetEnumerator();
  while (iterator.MoveNext())
  {
     Console.Write(iterator.Current);
  }
  iterator.Reset();
  while (iterator.MoveNext())
  {
      Console.Write(iterator.Current);
  }
}
static void M2()
{
  var list = new List<int>() { 1, 2, 3, 4 };
  //Here the iterator will be List<int>.Enumerator (which is a struct)
  var iterator = list.GetEnumerator();
  while (iterator.MoveNext())
  {
     Console.Write(iterator.Current);
  }
  //This will not work, as Reset method was implemented explicitly …
Run Code Online (Sandbox Code Playgroud)

.net c# ienumerator list

10
推荐指数
1
解决办法
448
查看次数

标签 统计

.net ×2

c# ×2

ienumerator ×2

list ×1