Это действительно зависит от вашего приложения. Если ваше приложение является многопоточным и pre .NET 4.0, обычно лучше использовать ReaderWriterLock/ReaderWriterLockSlim
и получить блокировку считывателя, создать список ключей, которые вы хотите удалить, а затем выполнить обновление до записи. заблокировать и выполнить цикл в списке, чтобы удалить ключи. Таким образом, пока вы перебираете ключи Hashtable
для удаления, другие читатели могут получить к ним доступ без блокировки.
Теперь, если вы можете добраться до .NET 4.0, ConcurrentDictionary
великолепен и имеет гораздо меньше споров! Если вы остаетесь в .NET 2.0, я бы порекомендовал Dictionary
, хотя это само по себе не является частью вашего вопроса.
ОБНОВЛЕНИЕ Если ваше приложение не многопоточное, не нужно блокировать, но вам все равно нужно создать список ключей, потому что вызов Remove () во время итерации делает недействительным переписчик. В общем, вы делаете это правильно, учитывая ваш комментарий к вопросу.