Condividi tramite


CA2207: Inizializzare i campi statici dei tipi di valore inline

Proprietà valore
ID regola CA2207
Title Inizializzare i campi statici dei tipi di valore inline
Categoria Utilizzo
La correzione causa un'interruzione o meno Non rompente
Abilitato per impostazione predefinita in .NET 10 No
Linguaggi applicabili C# e Visual Basic

Causa

Un tipo valore dichiara un costruttore statico esplicito.

Descrizione regola

Quando un tipo di valore viene dichiarato, viene sottoposto a un'inizializzazione predefinita in cui tutti i campi di tipo valore vengono impostati su zero e tutti i campi di tipo riferimento sono impostati su null (Nothing in Visual Basic). È garantita l'esecuzione di un costruttore statico esplicito solo prima che venga chiamato un costruttore di istanza o un membro statico del tipo. Pertanto, se il tipo viene creato senza chiamare un costruttore di istanza, non è garantito l'esecuzione del costruttore statico.

Se tutti i dati statici vengono inizializzati inline e non viene dichiarato alcun costruttore statico esplicito, i compilatori C# e Visual Basic aggiungono il beforefieldinit flag alla definizione della classe CIL. I compilatori aggiungono anche un costruttore statico privato che contiene il codice di inizializzazione statica. Questo costruttore statico privato è garantito che venga eseguito prima che qualsiasi campo statico del tipo venga accesso.

Come correggere le violazioni

Per correggere una violazione di questa regola, inizializzare tutti i dati statici quando vengono dichiarati e rimuovere il costruttore statico.

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;

    // ...
}

Quando eliminare gli avvisi

Non sopprimere un avviso da questa regola.

CA1810: Inizializzare i campi statici del tipo di riferimento inline