Спросить, сколько утверждений вы должны поместить в try
, все равно, что спросить, сколько утверждений вы должны добавить в if
или for
l oop. Почему вы никогда не спрашивали «сколько утверждений я должен добавить в if
заявление?»? Потому что вы понимаете, что такое выражение if
и что число утверждений в нем не имеет значения *. Что имеет значение, «какие заявления имеют смысл, когда помещены туда?» Таким образом, вместо этого вы, вероятно, спросите: « Что я могу поместить в if
?».
Приведенный выше абзац перестал иметь смысл после редактирования вопроса OP, но это прекрасно!
То, что вы, кажется, не понимаете, это то, почему мы иногда помещаем много строк кода в try
. Хорошо, один пример этого - когда вы читаете файл JSON. Вы бы сделали что-то вроде этого (очень грубый пример, только для иллюстрации):
try {
string json = ReadFile();
MyObject obj = ParseJSON(json);
DoSomethingWithMyObject(obj);
} catch (FileNotFoundException ex) {
ShowErrorToUser("File Not Found");
} catch (JsonReaderException ex) {
ShowErrorToUser("Invalid File");
}
ReadFile
может выдать FileNotFoundException
, а ParseJSON
может выдать JsonReaderException
. Вы не можете разделить эти три строки на 2 try
с:
string json;
MyObject obj;
try {
json = ReadFile();
} catch (FileNotFoundException ex) {
ShowErrorToUser("File Not Found");
}
try {
obj = ParseJSON(json);
} catch (JsonReaderException ex) {
ShowErrorToUser("Invalid File");
}
DoSomethingWithMyObject(obj);
Почему? Потому что определенные правила присваивания говорят, что json
и obj
точно не назначаются при их использовании! Видите ли, даже если ReadFile
не удастся, ParseJSON
все равно будет выполняться, но json
не будет иметь значения, если ReadFile
не удастся!
Если вы скажете "хорошо, я могу просто дать json
значение по умолчанию! ", это правда, но это не всегда имеет смысл делать. Иногда одна часть вашего метода просто не может работать, если другая часть выдает исключение. Это признак того, что две части должны быть в одном try
блоке # .
* Что ж, это важно, если вы говорить о стиле ...
# Очевидно, что если ваш метод не может обработать исключение, тогда вообще не должно быть блока try
.