IMO - Исключение - это действительно исключительное условие в вашем коде - то есть условия, которые нельзя предвидеть, и / или случаи, когда ошибка может привести к ошибке в действительно исключительных условиях.
Еслифрагмент кода, который вы показали выше, имеет numberOfShirikins == 0
не исключительное условие, это обычная проверка аргументов
Итак, я бы переформулировал код следующим образом:
public class Ninja{
Ninja(){
}
public void ThrowShirikin(int numberOfShirikins){
bool errorsExist = false;
try{
if(numberOfShirikins == 0){ showUserMessage("Invalid number of shirikins", MessageType.Information); }
}
catch(ArgumentException e){
showUserMessage(e.Message, MessageType.Exception, e);
}
if(!errorsExist){
//Throw shirikin
}
}
private showUserMessage(string message, MessageType type, Exception ex = null){
MessageBox.Show(message);
}
}
Как только это будет сделано, вы обнаружите, что на самом деле не происходит добавления значения для перехвата исключения, поэтому мы могли бы написать общий обработчик исключений, чтобы показать исключение и позволить вашему коду нормально проходить.
Теперьмой код будет выглядеть так:
public class Ninja{
Ninja(){
}
public void ThrowShirikin(int numberOfShirikins){
if(numberOfShirikins == 0){ showUserMessage("Invalid number of shirikins", MessageType.Information); return; }
else{ /* do something here */ }
}
С другой стороны, если numberOfShirikins == 0
является исключительным условием, я напишу пользовательское исключение с кодом в виде:
public class Ninja{
Ninja(){
}
public void ThrowShirikin(int numberOfShirikins){
if(numberOfShirikins == 0){ throw NumberOfShirikinsException(); }
else{ /* do something here */ }
}