Данная статья переведена с помощью средств машинного перевода. Чтобы просмотреть ее на английском языке, установите флажок Английский. Вы также можете просматривать английский текст во всплывающем окне, наводя указатель мыши на переведенный текст.
Перевод
Английский

Свойство Exception.InnerException

 

Опубликовано: Октябрь 2016

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

Пространство имен:   System
Сборка:  mscorlib (в mscorlib.dll)

public Exception InnerException { get; }

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

Type: System.Exception

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

Реализует

_Exception.InnerException

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

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

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

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

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

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

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.CatchInner()

Универсальная платформа Windows
Доступно с 8
.NET Framework
Доступно с 1.1
Переносимая библиотека классов
Поддерживается в: переносимые платформы .NET
Silverlight
Доступно с 2.0
Windows Phone Silverlight
Доступно с 7.0
Windows Phone
Доступно с 8.1
Вернуться в начало
Показ: