CA2019: ThreadStatic a mezők nem használhatnak beágyazott inicializálást

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.

Lásd még