Прочитать на английском

Поделиться через


Exception.InnerException Свойство

Определение

Возвращает экземпляр класса Exception, который вызвал текущее исключение.

public Exception InnerException { get; }
public Exception? InnerException { get; }

Значение свойства

Exception

Объект, описывающий ошибку, которая вызвала текущее исключение. Свойство InnerException возвращает то же значение, что было передано в конструктор Exception(String, Exception), или значение null, если конструктору не было передано значение внутреннего исключения. Это свойство доступно только для чтения.

Реализации

Примеры

В следующем примере показано создание и перехват исключения, которое ссылается на внутреннее исключение.

using System;

public class AppException : Exception
{
   public AppException(String message) : base (message)
   {}

   public AppException(String message, Exception inner) : base(message,inner) {}
}

public class Example
{
   public static void Main()
   {
      Example ex = new Example();

      try {
         ex.CatchInner();
      }
      catch(AppException e) {
         Console.WriteLine ("In catch block of Main method.");
         Console.WriteLine("Caught: {0}", e.Message);
         if (e.InnerException != null)
            Console.WriteLine("Inner exception: {0}", e.InnerException);
      }
   }

   public void ThrowInner ()
   {
      throw new AppException("Exception in ThrowInner method.");
   }

   public void CatchInner()
   {
      try {
         this.ThrowInner();
      }
      catch (AppException e) {
         throw new AppException("Error in CatchInner caused by calling the ThrowInner method.", e);
      }
   }
}
// The example displays the following output:
//    In catch block of Main method.
//    Caught: Error in CatchInner caused by calling the ThrowInner method.
//    Inner exception: AppException: Exception in ThrowInner method.
//       at Example.ThrowInner()
//       at Example.CatchInner()

Комментарии

При возникновении исключения X в результате предыдущего исключения YInnerException свойство X должно содержать ссылку на Y.

Свойство InnerException используется, чтобы получить набор исключений, ставших причиной текущего исключения.

Вы можете создать новое исключение, перехватывающее предыдущее исключение. Код, обрабатывающий второе исключение, может использовать дополнительные сведения из предыдущего исключения для более правильной обработки ошибки.

Предположим, что существует функция, которая считывает файл и форматирует данные из этого файла. В этом примере, когда код пытается прочитать файл, IOException создается исключение. Функция перехватывает IOException и вызывает исключение FileNotFoundException. Его IOException можно сохранить в InnerException свойстве FileNotFoundException, включив код, который перехватывает FileNotFoundException причину первоначальной ошибки.

Свойство InnerException , которое содержит ссылку на внутреннее исключение, задается при инициализации объекта исключения.

Применяется к