Есть ли встроенный in.NET исключение, которое указывает на незаконное состояние объекта?


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

3 53

3 ответа:

InvalidOperationException может?

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

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

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

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

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