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 causa un'interruzione
Abilitato per impostazione predefinita in .NET 10 No

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). È garantito 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 viene garantito di essere eseguito prima di accedere a tutti i campi statici del tipo.

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 escludere un avviso da questa regola.

CA1810: Inizializzare i campi statici del tipo di riferimento inline