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, когда он идет с исключениями?
Ответы
Ответ 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 для проверки ввода и вывода метода.