Перейти к основному содержимому

Иерархия классов исключений в C#

Разработчику Архитектору

Иерархия исключений в C#

Корневой класс:

  • Система.Exception

Основные прямые и косвенные подклассы Exception:

Из пространства имён Система:

  • Система.ApplicationException — устаревший базовый класс для пользовательских исключений (не рекомендуется к использованию).
  • Система.SystemException — базовый класс для всех системных исключений.
    • Система.ArgumentException
      • Система.ArgumentNullException
      • Система.ArgumentOutOfRangeException
    • Система.ArithmeticException
      • Система.DivideByZeroException
      • Система.OverflowException
    • Система.ArrayTypeMismatchException
    • Система.BadImageFormatException
    • Система.CannotUnloadAppDomainException
    • Система.ComponentModel.InvalidAsynchronousStateException
    • Система.ComponentModel.InvalidEnumArgumentException
    • Система.DataMisalignedException
    • Система.ExecutionEngineException — устарело (заменено на Система.Runtime.InteropServices.SEHException или аналоги).
    • Система.FieldAccessException
    • Система.FormatException
      • Система.UriFormatException
    • Система.IndexOutOfRangeException
    • Система.InvalidCastException
    • Система.InvalidOperationException
      • Система.ObjectDisposedException
      • Система.Threading.SynchronizationLockException
    • Система.IO.IOException
      • Система.IO.DirectoryNotFoundException
      • Система.IO.DriveNotFoundException
      • Система.IO.EndOfStreamException
      • Система.IO.FileLoadException
      • Система.IO.FileNotFoundException
      • Система.IO.PathTooLongException
    • Система.MemberAccessException
      • Система.FieldAccessException
      • Система.MethodAccessException
      • Система.MissingMemberException
        • Система.MissingFieldException
        • Система.MissingMethodException
    • Система.NotImplementedException
    • Система.NotSupportedException
    • Система.NullReferenceException
    • Система.OutOfMemoryException
    • Система.PlatformNotSupportedException
    • Система.RankException
    • Система.Reflection.AmbiguousMatchException
    • Система.Reflection.InvalidFilterCriteriaException
    • Система.Reflection.ReflectionTypeLoadException
    • Система.Resources.MissingManifestResourceException
    • Система.Runtime.InteropServices.COMException
    • Система.Runtime.InteropServices.ExternalException
      • Система.Runtime.InteropServices.SEHException
    • Система.Безопасность.SecurityException
    • Система.StackOverflowException
    • Система.Threading.ThreadAbortException — устарело в .NET Core/.NET 5+ (больше не генерируется).
    • Система.TimeoutException
    • Система.TypeInitializationException
    • Система.TypeLoadException
    • Система.UnauthorizedAccessException

Из других распространённых пространств имён:

  • System.Net.WebException (в .NET Framework; в .NET Core заменено на System.Net.Http.HttpRequestException)
  • System.Net.Http.HttpRequestException
  • Система.Text.DecoderFallbackException
  • Система.Text.EncoderFallbackException
  • Система.Threading.Задачи.TaskCanceledException

Особенности:

  • Нет checked-исключений: компилятор не требует объявления или перехвата исключений.
  • Исключения времени выполнения: большинство ошибок (например, NullReferenceException, IndexOutOfRangeException) возникают только при выполнении.
  • Платформо-зависимые исключения: например, PlatformNotSupportedException используется в кроссплатформенных API, когда функция недоступна на текущей ОС.
  • Устаревшие исключения: некоторые исключения (например, ApplicationException, ThreadAbortException) сохранены для совместимости, но не используются в современном коде.

Как получить список программно:

Полный список встроенных исключений нельзя получить динамически без анализа метаданных сборок. Однако можно перечислить все типы из mscorlib (или Система.Private.CoreLib в .NET Core) с помощью рефлексии:

using Система;
using Система.Linq;

var exceptionTypes = typeof(object).Assembly
.GetTypes()
.Where(t => t.IsSubclassOf(typeof(Exception)) && !t.IsAbstract)
.OrderBy(t => t.FullName);

foreach (var type in exceptionTypes)
Console.WriteLine(type.FullName);

Этот код выведет все конкретные (не абстрактные) типы исключений из основной сборки среды выполнения.


См. также

Другие статьи этого же раздела в боковом меню (как на странице «О разделе»).