CA2207: инициализируйте статические поля типа значений встроенными средствами
TypeName |
InitializeValueTypeStaticFieldsInline |
CheckId |
CA2207 |
Категория |
Microsoft.Usage |
Критическое изменение |
Не критическое |
Причина
Тип значения объявляет явный статический конструктор.
Описание правила
Когда объявляется тип значения, к нему применяется инициализация по умолчанию, при которой всем полям типа значения присваивается значение нуль, а всем полям ссылочного типа — значение null (Nothing в Visual Basic). Явный статический конструктор гарантированно выполняется только перед вызовом конструктора экземпляра или статического члена типа. Поэтому, если тип создается без вызова конструктора экземпляра, нельзя гарантировать выполнение статического конструктора.
Если инициализация всех статических данных реализуется встроенными средствами и явный статический конструктор не объявляется, то компиляторы C# и Visual Basic добавляют к определению класса MSIL флаг beforefieldinit. Компиляторы также добавляют закрытый статический конструктор, который содержит статический код инициализации. Этот закрытый статический конструктор обязательно выполняется перед доступом к любому статическому полю типа.
Устранение нарушений
Чтобы устранить нарушение данного правила, выполните инициализацию всех статических данных при их объявлении и удалите статический конструктор.
Отключение предупреждений
Для этого правила отключать вывод предупреждений не следует.
Связанные правила
CA1810: инициализируйте статические поля ссылочного типа встроенными средствами