Вопрос о том, где разместить операторы Try And Catch

Я использовал операторы try и catch как простой способ сохранить мой код работающим без сбоев (я бы обернул все в большой попытке). Относительно недавно, Я хотел начать более правильно использовать операторы try and catch. В качестве примера у меня есть вопросы по:

public class Ninja{
    Ninja(){
    }

    public void ThrowShirikin(int numberOfShirikins){
        try{
            if(numberOfShirikins == 0){
                throw new System.ArgumentException("Invalid number of shirikins");
            }

            //Throw shirikin
        }
        catch(ArgumentException e){
            MessageBox.Show(e.Message);
        }
    }
}

В приведенном выше классе Ninja все содержимое моего метода ThrowShirikin содержится в цикле try. Поскольку существует только одна возможность для ошибки ввода (в данном случае, когда numberOfShirikins == 0), не должны ли в цикле try содержаться только строки кода, которые проверяют это? См. Ниже:

public class Ninja{
    Ninja(){
    }

    public void ThrowShirikin(int numberOfShirikins){
        bool errorsExist = false;
        try{
            if(numberOfShirikins == 0){
                errorsExist = true;
                throw new System.ArgumentException("Invalid number of shirikins");
            }
        }
        catch(ArgumentException e){
            MessageBox.Show(e.Message);
        }

        if(!errorsExist){
            //Throw shirikin
        }
    }
}

^ Но то, что у меня здесь, кажется немного неуклюжим. Любые предложения и отзывы о том, как я понимаю использование операторов try catch? Спасибо!

Изменить:

Или я мог бы сделать что-то подобное, чтобы код // Throw shirikin никогда не выполнялся, если есть недопустимое значение для numberOfShirikins?:

public class Ninja{
    Ninja(){
    }

    public void ThrowShirikin(int numberOfShirikins){
        try{
            if(numberOfShirikins == 0){
                throw new System.ArgumentException("Invalid number of shirikins");
                return;
            }
        }
        catch(ArgumentException e){
            MessageBox.Show(e.Message);
        }

        //Throw shirikin
    }
}
9
задан sooprise 14 February 2011 в 20:42
поделиться