Для первого случая я буду накапливаться и скажу, что ArgumentNullException
является правильным.
Во втором случае я действительно очень удивлен, что никто больше не сказал этого: вы должны создать для этого свой собственный Exception
класс. Ни одно из встроенных системных исключений не подходит:
ArgumentException
подразумевает, что сам аргумент каким-то образом недопустим; это не совсем так. Аргумент был в порядке, просто что-то неожиданное случилось позже.
InvalidOperationException
является почти правильным, но это исключение обычно интерпретируется как означающее, что операция была вызвана в неправильное время, например, попытка выполнить команду в соединении, которое не ' еще не было открыто. Другими словами, это указывает на несоответствие между текущим состоянием объекта и конкретной операцией, которую вы пытались выполнить; это действительно не применимо и здесь.
NullReferenceException
прямо сейчас. Это зарезервированное исключение, которое означает что-то совершенно другое (что программа фактически пыталась почтить нулевая ссылка).
Ничего из этого не верно. То, что вам действительно нужно сделать, это сообщить , в частности , что пошло не так, и для того, чтобы сделать это, вы должны создать MissingThingException
. Это исключение может включать идентификатор предмета (предположительно arg
) в его сообщении / детали. Это лучше всего подходит для вызывающих абонентов, поскольку позволяет им перехватить конкретное исключение, если они знают, как его обработать, а также лучше всего подходит для конечных пользователей, поскольку позволяет оставлять значимое сообщение об ошибке.
Сводка: для этого создайте собственный класс исключений.