Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
CA2019:
| Tulajdonság | Érték |
|---|---|
| Szabályazonosító | CA2019 |
| Cím |
ThreadStatic a mezők nem használhatnak beágyazott inicializálást |
| Kategória | Megbízhatóság |
| A javítás romboló vagy nem romboló | Nem törhető |
| Alapértelmezés szerint engedélyezve a .NET 10-ben | Javaslatként |
| Alkalmazandó nyelvek | C# és Visual Basic |
Ok
Egy ThreadStaticAttribute jelöléssel ellátott mező kódban vagy explicit módon inicializálva van egy static (Shared Visual Basic) konstruktorban.
Szabály leírása
ThreadStaticAttribute a mezőket lazán kell inicializálni használatkor, és nem beágyazott inicializálással vagy explicit módon egy static (Shared Visual Basic) konstruktorban. A static konstruktor csak annak a szálnak a mezőjét inicializálja, amelyik a típus static konstruktorát futtatja.
Szabálysértés kijavítása
A hiba kijavításához távolítsa el az inline vagy static konstruktorinicializálást. Ehelyett inicializálja a mezőt az első használatkor.
Példa
Az alábbi kódrészlet a CA2019 megsértését mutatja be:
class C
{
[ThreadStatic]
private static Object obj = new();
}
Class C
<ThreadStatic>
Private Shared obj As New Object()
End Class
A következő kódrészlet bemutatja, hogyan hárítható el a szabálysértés:
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
Mikor kell letiltani a figyelmeztetéseket?
Nyugodtan el lehet tiltani a szabály figyelmeztetését, de az alkalmazás váratlan viselkedést mutathat.