Подтвердить что ты не робот

If statement for throwing Exception?

Привет, я хотел спросить, потому что я не уверен, является ли это propriete использованием Exception:

public int Method(int a, int b) {
   if(a<b) throw new ArgumentException("the first argument cannot be less than the second");
   //do stuff... 
}

Можно ли использовать Exception после if? или я должен всегда использовать try-catch, когда он идет с исключениями?

4b9b3361

Ответ 1

Это совершенно верно. Именно для этого используются исключения, чтобы проверить "Исключения" в вашей логике, вещи, которые не должны были быть.

Идея преодоления исключения заключается в том, что когда вы передаете данные где-то и обрабатываете их, вы не всегда можете знать, будет ли результат действительным, то есть когда вы хотите поймать.

Что касается вашего метода, вы не хотите улавливать внутри Method, но на самом деле, когда вы его вызываете, вот пример:

try
{
    var a = 10;
    var b = 100;
    var result = Method(a, b);
}
catch(ArgumentException ex) 
{
    // Report this back to the user interface in a nice way 
}

В приведенном выше случае a меньше, чем b, поэтому вы можете исключить здесь исключение, и вы можете обработать его соответствующим образом.

Ответ 2

В этом случае вы не хотите улавливать исключение. Вы бросаете это, чтобы предупредить вызывающего, что они допустили ошибку в способе, которым они назвали ваш метод. Поймать его сами не помешало бы этому произойти. Так что да, ваш код выглядит хорошо.

Ответ 3

Это прекрасно. Вы бросаете исключение, не ловясь/обрабатывая его, поэтому вам не нужен блок try/catch для него.

Ответ 4

Это совершенно верно, вы можете использовать ту же конструкцию даже с конструкторами . Но то, что вы не должны делать,

   public int Method(int a, int b)
    {
        try
        {
            if (a < b)
                throw new ArgumentException("the first argument cannot be less than the second");
        }
        catch (Exception)
        {

        }
        return 0;

    }

Ответ 5

У тебя есть правильная идея. Вы можете использовать свой код следующим образом:

void MyMainMethod()
{

    // ... oh, let call my Method with some arguments
    // I'm not sure if it'll work, so best to wrap it in a try catch

    try
    {
        Method(-100, 500);
    }
    catch (ArgumentException ex)
    {
        Console.WriteLine(ex.Message);
    }

}


public int Method(int a, int b)
{
    if (a < b) throw new ArgumentException("the first argument cannot be less than the second");

    //do stuff ...  and return 

}

Это может помочь просмотреть Исключения обработки и броузера MSDN и Best Практика обработки исключений

Ответ 6

То, что вы здесь сделали, отлично.

Общим шаблоном для проверок arg является обертка кода проверки/броска в статичном классе "Контракт", обеспечивающая последовательный подход к управлению исключениями при проверке входных аргументов.

Немного от темы, но если вы используете .NET 4.0, вы также можете посмотреть новую функцию Code Contracts для проверки ввода и вывода метода.