
Имеется статический метод void M(), вызов которого может выбрасывать исключения Exception и ArgumentException. Объявить статический метод int M1(), который вызывает метод М() и возвращает 1, если метод M() выбросит ArgumentException, возвращает 2, если метод M() выбросит Exception, и возвращает 0, если метод M() ничего не выбросит.


ArgumentException вызывается при вызове метода и по крайней мере один из переданных аргументов не соствует спецификации параметра вызываемого метода. Свойство ParamName идентифицирует недопустимый аргумент.
Чаще всего ArgumentException вызывается средой CLR или другой библиотекой классов и указывает на ошибку разработчика. При вызове ArgumentException из кода следует убедиться, что свойство Message исключения содержит осмысленное сообщение об ошибке, описывающее недопустимый аргумент и ожидаемый диапазон значений для аргумента.
Основные производные классы ArgumentException ArgumentNullException и ArgumentOutOfRangeException. Эти производные классы следует использовать вместо ArgumentException, за исключением случаев, когда ни один из производных классов является приемлемым. Например, исключения должны создаваться следующим образом:
ArgumentNullException, когда null передается в метод, который не принимает его в качестве допустимого аргумента.
ArgumentOutOfRangeException, если значение аргумента находится вне диапазона допустимых значений; Например, если значение "46" передается в качестве аргумента month во время создания DateTime.