Anmerkung
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen, dich anzumelden oder die Verzeichnisse zu wechseln.
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen , die Verzeichnisse zu wechseln.
CA2019:
| Eigenschaft | Wert |
|---|---|
| Regel-ID | CA2019 |
| Titel |
ThreadStatic-Felder sollten keine Inlineinitialisierung verwenden |
| Kategorie | Zuverlässigkeit |
| Fix führt oder führt nicht zur Unterbrechung | Nicht unterbrechend |
| Standardmäßig in .NET 10 aktiviert | Als Vorschlag |
Ursache
Ein Feld, das mit einer ThreadStaticAttribute-Anmerkung versehen ist, wird inline oder explizit in einem static-Konstruktor (Shared in Visual Basic) initialisiert.
Regelbeschreibung
ThreadStaticAttribute-Felder sollten bei der Verwendung verzögert initialisiert werden und nicht durch Inlineinitialisierung oder explizit in einem static-Konstruktor (Shared in Visual Basic). Ein static-Konstruktor initialisiert nur das Feld für den Thread, der den static-Konstruktor des Typs ausführt.
Beheben einer Verletzung
Um eine Verletzung zu beheben, entfernen Sie die Inline- oder static-Konstruktorinitialisierung. Initialisieren Sie das Feld stattdessen bei der ersten Verwendung.
Beispiel
Der folgende Codeschnipsel zeigt eine Verletzung von CA2019:
class C
{
[ThreadStatic]
private static Object obj = new();
}
Class C
<ThreadStatic>
Private Shared obj As New Object()
End Class
Der folgende Codeschnipsel zeigt, wie eine Verletzung behoben wird:
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
Wann sollten Warnungen unterdrückt werden?
Es ist sicher, eine Warnung von dieser Regel zu unterdrücken, aber Ihre App könnte unerwartetes Verhalten aufweisen.