我有movenext()异常

时间:2018-01-25 06:56:09

标签: c#

`enter code here`   

public override string GetUserNameBySicil(string sicil)         {             int total = -1;

        var users = FindUsersBySicil(sicil, 0, 3, out total);
        if (total > 0)
        {

            var user = (MemberUser)users.GetEnumerator().Current;


            return user.Sicil;
        }
        return null;
    }


    public IEnumerator GetEnumerator()
    {
          return this._Values.GetEnumerator();
    }

1 个答案:

答案 0 :(得分:1)

要使用MoveNext(),您需要保留迭代器,然后...调用MoveNext(),如下所示。

MoveNext()抛出异常的最常见原因是集合已被修改 - 您添加/删除/替换了一个项目。通常不允许这样做,因此您必须构建代码不要那样做。也许通过在迭代时跟踪计划的更改,然后在迭代后将它们应用于

var iter = users.GetEnumerator();
using(iter as IDisposable)
{
    while(iter.MoveNext())
    {
        var user = (MemberUser)iter.Current;
        // ...
    }
}

与:

相同
foreach(MemberUser user in users) {
    // ...
}

请注意,理想情况下,您有IEnumerator<MemberUser>,这会大大简化这一过程:

using(var iter = users.GetEnumerator())
{
    while(iter.MoveNext())
    {
        var user = iter.Current;
        // ...
    }
}

与:

相同
foreach(var user in users) {
    // ...
}