CA1805: не делайте лишних инициализаций

Свойство Значение
Идентификатор правила CA1805
Заголовок Не делайте лишних инициализаций
Категория Производительность
Исправление является критическим или не критическим Не критическое
Включен по умолчанию в .NET 8 No

Причина

Поле класса явным образом инициализируется со значением по умолчанию для этого типа поля.

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

Среда выполнения .NET инициализирует все поля ссылочных типов со значениями по умолчанию перед выполнением конструктора. В большинстве случаев явная инициализация поля со значением по умолчанию в конструкторе является избыточной, увеличивает затраты на обслуживание и может приводить к снижению производительности (например в результате увеличения размера сборки). Такая явная инициализация может быть удалена.

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

В большинстве случаев достаточно удалить лишнюю инициализацию.

class C
{
    // Violation
    int _value1 = 0;

    // Fixed
    int _value1;
}

Иногда после удаления инициализации могут появляться предупреждения CS0649 из-за того, что в поле будет постоянно храниться значение по умолчанию. В таких случаях лучше удалить поле целиком или заменить его свойством:

class C
{
    // Violation
    private static readonly int s_value = 0;

    // Fixed
    private static int Value => 0;
}

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

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

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

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

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

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

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

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

См. также