Я хотел бы добавить ответ, в котором основное внимание будет уделено значению ошибки. Исключительное исключение само по себе не дает никакого значения полной ошибки. Поэтому я бы посоветовал не обращаться к ним напрямую.
Существует тысячи случаев, когда ваш код может пойти не так: невозможно подключиться к базе данных, исключению IO, сетевой ошибке ... Если вы справляетесь с ними,
В коде:
wsObject.getFoo().getBar().getBaz().getInt();
Даже если вы знаете, какое поле имеет значение null, вы не имеют представления о том, что пошло не так. Может быть, Bar имеет значение NULL, но ожидаем? Или это ошибка данных? Подумайте о людях, которые читают ваш код
Как и в ответе xenteros, я бы предложил использовать выборочное исключение без проверки. Например, в этой ситуации: Foo может быть нулевым (действительные данные), но Bar и Baz никогда не должны быть нулевыми (недопустимыми данными)
Код может быть переписан:
void myFunction()
{
try
{
if (wsObject.getFoo() == null)
{
throw new FooNotExistException();
}
return wsObject.getFoo().getBar().getBaz().getInt();
}
catch (Exception ex)
{
log.error(ex.Message, ex); // Write log to track whatever exception happening
throw new OperationFailedException("The requested operation failed")
}
}
void Main()
{
try
{
myFunction();
}
catch(FooNotExistException)
{
// Show error: "Your foo does not exist, please check"
}
catch(OperationFailedException)
{
// Show error: "Operation failed, please contact our support"
}
}
Разделение общего кода на отдельный суб ...
Private Sub Copy_Jobs()
'either like this...
CopyAndFormat Worksheets("Sales").Range("Week1"), _
Worksheets("Tasks").Range("Job1")
CopyAndFormat Worksheets("Sales").Range("Week2"), _
Worksheets("Tasks").Range("Job2")
'...or in a loop
Dim i As Long
For i = 1 to 5
CopyAndFormat Worksheets("Sales").Range("Week" & i), _
Worksheets("Tasks").Range("Job" & i)
Next i
End Sub
Sub CopyAndFormat(w as Range, j As Range)
w(1).Cells.Value = j(1).Cells.Value
w(2).Cells.Value = j(2).Cells.Value
w(3).Cells.Value = j(3).Cells.Value
w(4).Cells.Value = j(5).Cells.Value
w.Font.Color = j.Font.Color
w.Interior.Color = j.Interior.Color
End Sub
Обратите внимание, что копирование шрифта и цветов интерьера действительно работает только в том случае, если диапазоны отформатированы согласованно.