指数超出范围.必须是非负误差

all*_*ded 2 c# asp.net-mvc

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

问题是当我检查toRemove计数低于受访者时.那么这个错误是怎么发生的?如果5个在respondentstoRemove只有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);
}
Run Code Online (Sandbox Code Playgroud)

Réd*_*tar 6

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

foreach (var respRemove in toRemove.OrderByDesc(r => r).ToList())
{
    respondents.RemoveAt(respRemove);
}
Run Code Online (Sandbox Code Playgroud)