5.05. Иерархия исключений в C#
Иерархия исключений в C#
Корневой класс:
System.Exception
Основные прямые и косвенные подклассы Exception:
Из пространства имён System:
System.ApplicationException— устаревший базовый класс для пользовательских исключений (не рекомендуется к использованию).System.SystemException— базовый класс для всех системных исключений.System.ArgumentExceptionSystem.ArgumentNullExceptionSystem.ArgumentOutOfRangeException
System.ArithmeticExceptionSystem.DivideByZeroExceptionSystem.OverflowException
System.ArrayTypeMismatchExceptionSystem.BadImageFormatExceptionSystem.CannotUnloadAppDomainExceptionSystem.ComponentModel.InvalidAsynchronousStateExceptionSystem.ComponentModel.InvalidEnumArgumentExceptionSystem.DataMisalignedExceptionSystem.ExecutionEngineException— устарело (заменено наSystem.Runtime.InteropServices.SEHExceptionили аналоги).System.FieldAccessExceptionSystem.FormatExceptionSystem.UriFormatException
System.IndexOutOfRangeExceptionSystem.InvalidCastExceptionSystem.InvalidOperationExceptionSystem.ObjectDisposedExceptionSystem.Threading.SynchronizationLockException
System.IO.IOExceptionSystem.IO.DirectoryNotFoundExceptionSystem.IO.DriveNotFoundExceptionSystem.IO.EndOfStreamExceptionSystem.IO.FileLoadExceptionSystem.IO.FileNotFoundExceptionSystem.IO.PathTooLongException
System.MemberAccessExceptionSystem.FieldAccessExceptionSystem.MethodAccessExceptionSystem.MissingMemberExceptionSystem.MissingFieldExceptionSystem.MissingMethodException
System.NotImplementedExceptionSystem.NotSupportedExceptionSystem.NullReferenceExceptionSystem.OutOfMemoryExceptionSystem.PlatformNotSupportedExceptionSystem.RankExceptionSystem.Reflection.AmbiguousMatchExceptionSystem.Reflection.InvalidFilterCriteriaExceptionSystem.Reflection.ReflectionTypeLoadExceptionSystem.Resources.MissingManifestResourceExceptionSystem.Runtime.InteropServices.COMExceptionSystem.Runtime.InteropServices.ExternalExceptionSystem.Runtime.InteropServices.SEHException
System.Security.SecurityExceptionSystem.StackOverflowExceptionSystem.Threading.ThreadAbortException— устарело в .NET Core/.NET 5+ (больше не генерируется).System.TimeoutExceptionSystem.TypeInitializationExceptionSystem.TypeLoadExceptionSystem.UnauthorizedAccessException
Из других распространённых пространств имён:
System.Net.WebException(в .NET Framework; в .NET Core заменено наSystem.Net.Http.HttpRequestException)System.Net.Http.HttpRequestExceptionSystem.Text.DecoderFallbackExceptionSystem.Text.EncoderFallbackExceptionSystem.Threading.Tasks.TaskCanceledException
Особенности:
- Нет checked-исключений: компилятор не требует объявления или перехвата исключений.
- Исключения времени выполнения: большинство ошибок (например,
NullReferenceException,IndexOutOfRangeException) возникают только при выполнении. - Платформо-зависимые исключения: например,
PlatformNotSupportedExceptionиспользуется в кроссплатформенных API, когда функция недоступна на текущей ОС. - Устаревшие исключения: некоторые исключения (например,
ApplicationException,ThreadAbortException) сохранены для совместимости, но не используются в современном коде.
Как получить список программно:
Полный список встроенных исключений нельзя получить динамически без анализа метаданных сборок. Однако можно перечислить все типы из mscorlib (или System.Private.CoreLib в .NET Core) с помощью рефлексии:
using System;
using System.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);
Этот код выведет все конкретные (не абстрактные) типы исключений из основной сборки среды выполнения.