freeCodeCamp/guide/russian/csharp/try-catch/index.md

5.9 KiB
Raw Blame History

title localeTitle
Try Catch Finally Попробуйте Catch Наконец

Попробуйте Catch Наконец

Блок Try-Catch-finally используется, чтобы избежать необработанных исключений, нарушающих ваше приложение. Когда ваш код throws исключение, которое находится между секцией try оно будет зажато в catch части инструкции, где вы можете обрабатывать ее по своему усмотрению. Оператор finally всегда запускается в конце и обычно используется для очистки неуправляемых ресурсов. Вам не всегда нужно иметь три блока, ниже приведены допустимые параметры.

  • Try-Catch-Наконец
  • Попробуй поймать
  • Примерка Наконец

Синтаксис

try 
 { 
   // Code which could potentially throw an exception 
   var parsedValue = Int32.Parse("abcde"); 
 } 
 catch(Exception e) 
 { 
    // Code to handle the exception 
    Console.WriteLine("Exception: " + e.Message); 
 } 
 finally 
 { 
    // Code which will always run no matter what. 
    Console.WriteLine("Try-Catch block has finished execution"); 
 } 

В приведенном выше примере мы пытаемся преобразовать 'abcde' в числовое значение. Эта строка генерирует исключение, потому что оно не может быть успешно преобразовано в число. Вызов будет пойман в блоке catch, и сообщение об исключении и другие данные будут сохранены в переменной, назначенной в блоке catch (буква «e» в приведенном выше примере). После того, как все это будет выполнено, раздел «finally» будет выполнен, чтобы закончить его.

Попробуйте блок

Блок try должен быть помещен вокруг кода, который может вести себя обычным образом и вызывать Exception и разорвать ваше приложение. Имея блок try, вы защищаете себя от фатального сбоя приложения. Важно отметить, как только ваше приложение имеет ошибку и генерируется исключение, остальная часть кода в блоке Try не будет выполнена.

Блок try имеет свою собственную область методов, поэтому любые переменные, объявленные внутри блока try, не будут доступны вне блока try.

try 
 { 
    // Read user input from the console. 
    var userInput = Console.ReadLine(); 
 } 
 catch(Exception e) 
 { 
    Console.WriteLine("Exception: " + e.Message); 
 } 
 
 //Outside the Try block 
 var parsedUserInput = Int32.Parse(userInput);  // Not correct 

Приведенное выше даст вам ошибку времени компиляции, так как значение userInput недоступно. Если вам нужен доступ к переменной вне блока try-catch, вам нужно будет объявить переменную перед блоком try.

var userInput = ""; 
 try 
 { 
    // Read user input from the console. 
    userInput = Console.ReadLine(); 
 } 
 catch(Exception e) 
 { 
    Console.WriteLine("Exception: " + e.Message); 
 } 
 
 //Outside the Try block 
 var parsedUserInput = Int32.Parse(userInput);  // Correct 

Блок уловов

В этом блоке указывается, какой тип Exception вы хотите поймать. Если вы хотите уловить ВСЕ возможные исключения, вы можете использовать базовый класс Exception . Если вы хотите только поймать определенный тип исключения, вы можете указать это вместо этого. Некоторыми примерами других типов исключений являются ArgumentException , OutOfMemoryException и FormatException .

try 
 { 
   var parsedValue = Int32.Parse("abcde"); 
 } 
 // Only FormatExceptions will be caught in this catch block. 
 catch(FormatException exceptionVariable) 
 { 
    Console.WriteLine(exceptionVariable.Message); 
 } 

Переменная, объявленная после типа исключения, будет содержать все данные исключения и может использоваться в блоке Catch .

Наконец, блок

Блок finally всегда запускается в конце после блоков Try и Catch . Этот раздел обычно используется, когда что-то должно происходить в конце, независимо от того, было ли исключено исключение. Например, скажем, нам нужна переменная, которая всегда должна быть повторно инициализирована обратно до определенного числа после того, как она будет манипулировать все время.

int initalValue = 12; 
 try 
 { 
    // Code which manipulates 'initialValue' 
 } 
 finally 
 { 
    Console.WriteLine("re-initalising value back to 12"); 
    initialValue = 12; 
 }