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
Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.