Список вызовов <T>.Clear (), вызывающий исключение IndexOutOfRangeException - PullRequest
8 голосов
/ 22 февраля 2012

У меня есть List<T> в классе сущностей, который заполняется через NHibernate.Когда я звоню .Clear() в этом списке, я получаю IndexOutOfRangeException.

Я проверил, что в этом списке есть элементы, прежде чем вызывать его, но выдается то же исключение.

При каких обстоятельствах вы ожидаете получить это исключение при вызове этого метода?

private readonly List<VacancyTag> _vacancyTags = new List<VacancyTag>();

public virtual void RemoveAllVacancyTags()
{
    _vacancyTags.Clear();
}

Редактировать:

Сумасшедшая вещь в том, что даже после того, как сгенерировано исключение и я сломал отладчик, я могу запросить объект в ближайшем окне и подтвердить, что Count () метод возвращает значение 5!

Ответы [ 2 ]

7 голосов
/ 22 февраля 2012

Типичный случай, когда у нескольких потоков есть доступ к одному и тому же списку.

Если один поток удаляет элемент во время очистки списка другим потоком, это исключение может быть выдано.

Помните, что класс List<T> не потокобезопасен.

0 голосов
/ 22 февраля 2012

Если вы используете потоки, пожалуйста, заблокируйте вызов метода Clear().

private readonly object obj = new Object();

private readonly List<VacancyTag> _vacancyTags = new List<VacancyTag>();

public virtual void RemoveAllVacancyTags()
{
    lock(obj)
    {
        _vacancyTags.Clear();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...