удалить все предметы из коллекции - PullRequest
1 голос
/ 21 марта 2012

Я пытаюсь удалить все элементы в моей Hashtable с этим кодом

Monitor.Enter(myhasatable);
 foreach (object key in myhasatable.Keys)
            {

                    myhasatable.Remove(key.ToString());

            }
 Monitor.Exit(myhasatable);

Я получаю ошибку:

В system.invalidoperationexception collection было изменено перечисление операция может не выполняться

и мой сервер застревает, пока я не обновлю его

Есть идеи, что может вызвать эту проблему?

Thnaks

Ответы [ 3 ]

2 голосов
/ 21 марта 2012

Вы пытались обратиться к документации?

myHashTable.Clear()

Члены HashTable

HashTable.Clear ()

1 голос
/ 21 марта 2012

Вы не можете изменять коллекцию, пока выполняете ее.Попробуйте вместо этого вызвать Clear.

Кроме того, постарайтесь не использовать Hashtable в новом коде.Если у вас есть выбор, используйте Dictionary<TKey, TValue>.

Ваш сервер заходит в тупик, потому что Monitor.Exit не достигается, если в строке ранее возникло исключение.Вы можете исправить это, поместив этот код в блок finally.Но вместо использования Monitor я предлагаю вам использовать lock, поскольку это автоматически снимает блокировку даже при наличии исключений.

Со всеми этими изменениями ваш код становится намного проще:

lock (dict)
{
    dict.Clear();
}
1 голос
/ 21 марта 2012

Как насчет просто сделать:

myhasatable.Clear():
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...