2013-05-08 3 views
9

Я знаю сводки и описания.InvalidOperationException vs. ArgumentException

Но что, если АРГУМЕНТ находится в НЕВЕРНОМ СОСТОЯНИИ?

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

+0

Слишком локализован ... Фактические пользователи не заботятся об этом ... Важно то, что вы делаете из этого, и поэтому это чистый вкус ... –

ответ

11

документация говорит, что это довольно ясно:

InvalidOperationException используется в тех случаях, когда отказ вызова метод вызывается причинами другие чем недействительных аргументов.
...
Если сбой вызова метода из-за неправильных аргументов, то ArgumentException или один из его производных классов, ArgumentNullException или ArgumentOutOfRangeException, должен быть выброшен вместо этого.

Ваш метод ожидает, что аргументы будут находиться в определенном состоянии, которое может включать в себя все, что входит в «правильное состояние», как определено самим типом аргумента.
Я думаю, что основная точка различия является источником проблемы:
Является ли это аргументом или объектом, на который вы называете метод?

0

Возможно, вы пропустили с отсутствием примера.

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

InvalidOperationException: Пример будет модифицировать коллекцию, в то время как перечислитель действует. Это приводит к исключению недействительной операции.

Смежные вопросы