Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
CA2019:
| Eigenschap | Waarde |
|---|---|
| Regel-id | CA2019 |
| Titel |
ThreadStatic velden mogen geen inline initialisatie gebruiken |
| Categorie | Betrouwbaarheid |
| Fix kan brekend of niet-brekend zijn | Niet-brekend |
| Standaard ingeschakeld in .NET 10 | Als suggestie |
| Toepasselijke talen | C# en Visual Basic |
Oorzaak
Een veld dat is geannoteerd met ThreadStaticAttribute wordt inline geïnitialiseerd of expliciet in een static-constructor (Shared in Visual Basic).
Beschrijving van regel
ThreadStaticAttribute velden moeten op laadtijd bij gebruik worden geïnitialiseerd en niet via inline-initialisatie of expliciet in een static constructor (Shared in Visual Basic). Een static-constructor initialiseert alleen het veld op de thread waarop de static-constructor van het type wordt uitgevoerd.
Een schending oplossen
Als u een schending wilt oplossen, verwijdert u de initialisatie van de inline of static constructor. Initialiseer in plaats daarvan het veld bij eerste gebruik.
Voorbeeld
In het volgende codefragment ziet u een schending van CA2019:
class C
{
[ThreadStatic]
private static Object obj = new();
}
Class C
<ThreadStatic>
Private Shared obj As New Object()
End Class
In het volgende codefragment ziet u hoe u een schending kunt oplossen:
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
Wanneer waarschuwingen onderdrukken
Het is veilig om een waarschuwing van deze regel te onderdrukken, maar uw app kan onverwacht gedrag vertonen.