Практическое руководство. Явное создание исключения

Обновлен: Ноябрь 2007

Исключения можно создавать явно с помощью оператора throw. Используя оператор throw, также можно переслать далее перехваченное исключение. Хорошей практикой в программировании является добавление информации к исключению, которое посылается повторно — это позволяет сделать процесс отладки более информативным.

В следующем примере кода для перехвата возможного исключения FileNotFoundException используется блок try/catch. За блоком try следует блок catch, который перехватывает исключение FileNotFoundExceptionи выводит на консоль сообщение в том случае, если файл данных не найден. Далее идет оператор throw, который создает новое исключение FileNotFoundException и добавляет к исключению текстовую информацию.

Пример

Option Strict On

Imports System
Imports System.IO

Public Class ProcessFile

   Public Shared Sub Main()
      Dim fs As FileStream = Nothing
      Try
          'Opens a text file.
          fs = New FileStream("c:\temp\data.txt", FileMode.Open)
          Dim sr As New StreamReader(fs)
          Dim line As String

          'A value is read from the file and output to the console.
          line = sr.ReadLine()
          Console.WriteLine(line)
      Catch e As FileNotFoundException
          Console.WriteLine("[Data File Missing] {0}", e)
          Throw New FileNotFoundException("[data.txt not in c:\temp directory]", e)
      Finally
          If fs IsNot Nothing Then fs.Close
      End Try
   End Sub 
End Class 
using System;
using System.IO;

public class ProcessFile
{
   public static void Main()
      {
      FileStream fs = null;
      try   
      {
         //Opens a text tile.
         fs = new FileStream(@"C:\temp\data.txt", FileMode.Open);
         StreamReader sr = new StreamReader(fs);
         string line;

         //A value is read from the file and output to the console.
         line = sr.ReadLine();
         Console.WriteLine(line);
      }
      catch(FileNotFoundException e)
      {
         Console.WriteLine("[Data File Missing] {0}", e);
         throw new FileNotFoundException(@"data.txt not in c:\temp directory]",e);
      }
      finally
      {
         if (fs != null) 
            fs.Close();
      }
   }
}

См. также

Задачи

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

Практическое руководство. Использование определенных исключений в блоке Catch

Практическое руководство. Использование блоков Finally

Другие ресурсы

Основы обработки исключений