Comparteix a través de


CA2207: Inicialice campos estáticos de tipo de valor en línea

Propiedad Valor
Identificador de la regla CA2207
Título Inicializar campos estáticos de tipos de valor en línea
Categoría Uso
La corrección interrumpe o no interrumpe Sin interrupción
Habilitado de forma predeterminada en .NET 10 No
Idiomas aplicables C# y Visual Basic

Causa

Un tipo de valor declara un constructor estático explícito.

Descripción de la regla

Cuando se declara un tipo de valor, se somete a una inicialización predeterminada en la que todos los campos de tipo de valor se establecen en cero y todos los campos de tipo de referencia se establecen en null ( Nothing en Visual Basic). Solo se garantiza que un constructor estático explícito se ejecute antes de que se llame a un constructor de instancia o a un miembro estático del tipo. Por consiguiente, si el tipo se crea sin llamar a un constructor de instancia, no se garantiza que el constructor estático se ejecute.

Si todos los datos estáticos se inicializan en línea y no se declara ningún constructor estático explícito, los compiladores de C# y Visual Basic agregan la beforefieldinit marca a la definición de clase CIL. Los compiladores también agregan un constructor estático privado que contiene el código de inicialización estático. Se garantiza que este constructor privado estático se ejecutará antes de que se acceda a los campos estáticos de la clase.

Cómo corregir infracciones

Para corregir una infracción de esta regla, inicialice todos los datos estáticos cuando se declara y quite el constructor estático.

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;

    // ...
}

Cuándo suprimir las advertencias

No suprima las advertencias de esta regla.

CA1810: Inicializar campos estáticos de tipo de referencia en línea