Condividi tramite


CA2019: ThreadStatic i campi non devono usare l'inizializzazione in linea

Proprietà valore
ID regola CA2019
Title ThreadStatic i campi non devono usare l'inizializzazione inline
Categoria Affidabilità
La correzione causa un'interruzione o meno Non rompente
Abilitato per impostazione predefinita in .NET 10 Come suggerimento
Linguaggi applicabili C# e Visual Basic

Causa

Un campo annotato con ThreadStaticAttribute viene inizializzato in linea o in modo esplicito in un costruttore static (Shared in Visual Basic).

Descrizione regola

ThreadStaticAttribute i campi devono essere inizializzati in modo differito al momento dell'uso e non con inizializzazione "inline" o in modo esplicito in un static costruttore (Shared in Visual Basic). Il costruttore static inizializza solo il campo sul thread che esegue il costruttore del tipo static.

Come correggere una violazione

Per correggere una violazione, rimuovere l'inizializzazione inline o static del costruttore. Inizializzare invece il campo al primo utilizzo.

Esempio

Il frammento di codice seguente mostra una violazione di CA2019:

class C
{
    [ThreadStatic]
    private static Object obj = new();
}
Class C
    <ThreadStatic>
    Private Shared obj As New Object()
End Class

Il frammento di codice seguente illustra come correggere una violazione:

class C
{
    [ThreadStatic]
    private static Object obj;

    static void S1()
    {
        obj ??= new Object();
    }
}
Class C
    <ThreadStatic>
    Private Shared obj

    Shared Sub S1()
        If obj Is Nothing Then
            obj = New Object()
        End If
    End Sub
End Class

Quando eliminare gli avvisi

È possibile eliminare un avviso da questa regola, ma l'app potrebbe presentare un comportamento imprevisto.

Vedi anche