CA2019: ThreadStatic
i campi non devono usare l'inizializzazione inline
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 causa un'interruzione |
Abilitato per impostazione predefinita in .NET 9 | Come suggerimento |
Causa
Un campo con ThreadStaticAttribute annotazioni viene inizializzato inline o in modo esplicito in un static
costruttore (Shared
in Visual Basic).
Descrizione regola
ThreadStaticAttribute i campi devono essere inizializzati in modo differita in caso di utilizzo e non con inizializzazione inline o in modo esplicito in un static
costruttore (Shared
in Visual Basic). Un static
costruttore inizializza solo il campo nel thread che esegue il costruttore del static
tipo.
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.