Megosztás a következőn keresztül:


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 kompatibilitástörő vagy nem törik Nem törés
Alapértelmezés szerint engedélyezve a .NET 8-ban Javaslatként

Ok

A jegyzetekkel ellátott ThreadStaticAttribute mezők inicializálva lesznek beágyazottan vagy explicit módon 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 a típus konstruktorát futtató szál mezőjét inicializálja static .

Szabálysértés kijavítása

A szabálysértés kijavításához távolítsa el a beágyazott 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.

Kapcsolódó információk