c# - 索引超出范围。必须是非负误差

标签 c# asp.net-mvc

我不断收到索引超出范围的异常。不得为非负数且小于集合的大小。

问题是当我检查 toRemove 时,计数低于响应者。那么这个错误是怎么发生的呢?如果 respondents 中有 5 个,而 toRemove 只有 3 个,那么这个错误是如何发生的?

var respondents = RespondentRepository.GetRespondents(UserSession, fieldsToInclude);

// iterate through the respondents. If search query not like results throw the result away.
List<int> toRemove = new List<int>();
for (int i = 0; i < respondents.Count; i++)
{
    if (!respondents[i].EmailAddresses.Any())
        toRemove.Add(i);
    else
    {
        bool checkSingleEmail = false;
        bool checkAllEmails = false;
        for (int j = 0; j < respondents[i].EmailAddresses.Count; j++)
        {
            checkSingleEmail = respondents[i].EmailAddresses[j].Address.ToString().Contains(query);

            if (checkSingleEmail == true)
                checkAllEmails = true;

            if (respondents[i].EmailAddresses.Count == 1 && j == 0 && checkAllEmails == false)
                toRemove.Add(i);
            else if (checkAllEmails == false && j+1 == respondents[i].EmailAddresses.Count)
                toRemove.Add(i);
        }
    }
}

foreach (var respRemove in toRemove)
{
    respondents.RemoveAt(respRemove);
}

最佳答案

如果你想使用索引,你可以这样写:

foreach (var respRemove in toRemove.OrderByDesc(r => r).ToList())
{
    respondents.RemoveAt(respRemove);
}

关于c# - 索引超出范围。必须是非负误差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19567778/

相关文章:

c# - 不允许下拉菜单选择空值

c# - Azure IOT 中心 - 监控 1 台设备的设备到云通信

c# - 与 MVC6/ASP.Net 5 的动态捆绑

javascript - 如何使 Foundation 5 Reveal Popup 响应?

asp.net-mvc - 如何将 MVC 添加到现有的 Web API 项目

c# - 单元测试断言查询

jquery - 如何在jquery for循环变量中传递变量

c# - 想深入了解Http

asp.net-mvc - 多对多关系、复选框的 CRUD View

c# - 我可以在 VSIX 中检测到使用 Visual Studio Workspace 保存(未更改)的文档吗?