Какое исключение выдается при обнаружении недопустимого / поврежденного состояния объекта контейнера после факта? - PullRequest
1 голос
/ 17 декабря 2010

Я столкнулся с ситуацией, когда из-за другой области кода, которую я назвал, не удалось скопировать возвращаемое Dictionary<TKey, TValue>, возникает проблема параллелизма : кажется, что Dictionary содержит недопустимый нольkeys.

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

1 Ответ

5 голосов
/ 17 декабря 2010

Ожидает ли кто-либо из абонентов исключение?Может ли любой абонент обработать исключение?Может ли любой абонент восстановить из исключения?Как вы думаете, что произойдет после броска?

В этой ситуации, когда структуры данных произвольно повреждены в значительной степени ни один из ваших инвариантов не известен как истинный.Тот факт, что вы все еще выполняете код, является чудом.Если у вас нет веских причин поступить иначе, я был бы склонен регистрировать любую информацию, необходимую для диагностики ошибки и быстрого сбоя.Бросив исключение и запустив блоки finally, вряд ли что-то улучшится.

В конечном счете, конечно, все, что вы делаете, является временным промежутком. Исправлена ​​ошибка, приводящая к повреждению ваших данных .

...