Есть ли встроенное исключение .NET, которое указывает на недопустимое состояние объекта? - PullRequest
54 голосов
/ 03 ноября 2008

Какое исключение я должен выбросить, если я столкнулся с недопустимым состоянием - например, метод инициализации, который должен вызываться только один раз, когда вызывается во второй раз? Я не вижу встроенного исключения, которое имеет смысл. Это похоже на то, что должно быть в рамках - я не тыкаю в нужное место?

Ответы [ 3 ]

68 голосов
/ 03 ноября 2008

InvalidOperationException возможно?

Исключение, которое выдается, когда вызов метода недопустим для текущего состояния объекта.

0 голосов
/ 27 июля 2018

В общем случае вы должны запрограммировать свой объект таким образом , чтобы он не мог достичь недопустимого состояния . Если вы обнаружите, что ваш объект находится в недопустимом состоянии, вы должны выбросить SystemException или исключение , непосредственно полученное из SystemException. Это ответ на вопрос в заголовке .

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

Излишне говорить, что вам нужно документ , как использовать ваш объект. Если ваш объект имеет длительный срок службы или если он используется / совместно используется разными объектами, то для пользователя было бы удобно иметь возможность запрашивать текущее состояние и реализовывать ToString для получения текущего состояния, например, в виде текста. в среде отладки / лог.

0 голосов
/ 03 ноября 2008

Если вообще я бы сказал, System.InvalidProgramException получить ближе к тому, что вы хотите. Что плохого в создании пользовательского исключения?

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