Бөлісу құралы:


CA1513: Используйте вспомогательную функцию ObjectDisposedException для выброса

Свойство Значение
Идентификатор правила CA1513
Заголовок Используйте метод throw helper для ObjectDisposedException
Категория Ремонтопригодность
Исправление является критическим или не критическим Неразрывное
Включен по умолчанию в .NET 10 Как предложение
Применимые языки C# и Visual Basic

Причина

Код проверяет, удаляется ли объект, а затем условно вызывает ObjectDisposedException.

Описание правила

Проверки объектов оказывают существенное влияние на размер кода и часто доминируют в коде для небольших функций и наборов свойств. Эти проверки предотвращают инлайнинг и вызывают существенное засорение инструкционного кэша. Вспомогательные методы, такие как ThrowIf, более простые и эффективные, чем if блоки, создающие новый экземпляр исключения.

Пример

В следующем фрагменте кода показано нарушение CA1513:

class C
{
    private bool _disposed = false;
    void M()
    {
        if (_disposed)
            throw new ObjectDisposedException(GetType().Name);
    }
}

В следующем фрагменте кода показано исправление:

class C
{
    private bool _disposed = false;
    void M()
    {
        ObjectDisposedException.ThrowIf(_disposed, this);
    }
}

Устранение нарушений

Замените if блок, который создает исключение вызовом ThrowIf. Кроме того, в Visual Studio используйте меню лампочки для автоматического исправления кода.

Когда лучше отключить предупреждения

Нарушение этого правила можно безопасно скрыть, если вы не беспокоитесь о поддерживаемости вашего кода. Также можно игнорировать нарушения, если это ложноположительный результат.

Отключение предупреждений

Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.

#pragma warning disable CA1513
// The code that's violating the rule is on this line.
#pragma warning restore CA1513

Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none в файле конфигурации.

[*.{cs,vb}]
dotnet_diagnostic.CA1513.severity = none

Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.