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


CA2207: инициализируйте статические поля типа значений в строке

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

Причина

Тип значения объявляет явный статический конструктор.

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

При объявлении типа значения он проходит инициализацию по умолчанию, когда все поля типа значения устанавливаются в ноль, а всем полям ссылочного типа присваивается значение null (Nothing в Visual Basic). Явный статический конструктор гарантированно выполняется только перед вызовом конструктора экземпляра или статического члена типа. Таким образом, если тип создается без вызова конструктора экземпляра, выполнение статического конструктора не гарантируется.

Если все статические данные инициализированы inline и не объявлен явный статический конструктор, компиляторы C# и Visual Basic добавляют флаг beforefieldinit в определение класса CIL. Компиляторы также добавляют закрытый статический конструктор, который содержит статический код инициализации. Этот закрытый статический конструктор гарантированно выполняется перед обращением к любым статическим полям типа.

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

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

Example

// This struct violates the rule.
struct BadStruct
{
    private static readonly int s_first;
    private static readonly int s_second;

    static BadStruct()
    {
        s_first = 1;
        s_second = 2;
    }

    // ...
}

// This struct satisfies the rule.
struct GoodStruct
{
    private static readonly int s_first = 1;
    private static readonly int s_second = 2;

    // ...
}

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

Для этого правила отключать вывод предупреждений не следует.

CA1810: инициализируйте статические поля ссылочного типа встроенными средствами