CA1032: реализуйте стандартные конструкторы исключения
Свойство | Значение |
---|---|
Идентификатор правила | CA1032 |
Заголовок | Реализуйте стандартные конструкторы исключений |
Категория | Проектирование |
Исправление является критическим или не критическим | Не критическое |
Включен по умолчанию в .NET 9 | No |
Причина
Тип расширяет System.Exception, но не объявляет все необходимые конструкторы.
Описание правила
Типы исключений должны реализовывать следующие три открытых конструктора:
public NewException()
public NewException(string)
public NewException(string, Exception)
Для правильной обработки исключений необходимо предоставить полный набор конструкторов. Например, конструктор с сигнатурой NewException(string, Exception)
используется для создания исключений, вызванных другими исключениями. Без этого конструктора нельзя создать и вызвать экземпляр пользовательского исключения, содержащей внутреннее (вложенное) исключение, что в таком случае должен делать управляемый код.
Дополнительные сведения см. в правиле CA2229: применяйте конструкторы сериализации.
Устранение нарушений
Чтобы устранить нарушение этого правила, добавьте недостающие конструкторы в исключение и убедитесь, что они имеют правильную доступность.
Когда лучше отключить предупреждения
Предупреждения о нарушении этого правила можно безопасно скрывать, если нарушение вызвано использованием другого уровня доступа для открытых конструкторов.
Отключение предупреждений
Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.
#pragma warning disable CA1032
// The code that's violating the rule is on this line.
#pragma warning restore CA1032
Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none
в файле конфигурации.
[*.{cs,vb}]
dotnet_diagnostic.CA1032.severity = none
Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.
Пример
В следующем примере содержится тип исключения, нарушающий это правило, и тип исключения, который был правильно реализован.
// Violates rule ImplementStandardExceptionConstructors.
public class BadException : Exception
{
public BadException()
{
// Add any type-specific logic, and supply the default message.
}
}
[Serializable()]
public class GoodException : Exception
{
public GoodException()
{
// Add any type-specific logic, and supply the default message.
}
public GoodException(string message) : base(message)
{
// Add any type-specific logic.
}
public GoodException(string message, Exception innerException) :
base(message, innerException)
{
// Add any type-specific logic for inner exceptions.
}
}