Udostępnij za pośrednictwem


CA2019: ThreadStatic pola nie powinny używać inicjalizacji wbudowanej

Właściwości Wartość
Identyfikator reguły CA2019
Tytuł ThreadStatic pola nie powinny używać inicjalizacji w linii
Kategoria Niezawodność
Poprawka łamiąca lub nienaruszająca Niezgodność
Domyślnie włączone na platformie .NET 10 Jako sugestia
Zastosowane języki C# i Visual Basic

Przyczyna

Pole z adnotacjami ThreadStaticAttribute jest inicjowane w tekście lub jawnie w konstruktorze static (Shared w Visual Basic).

Opis reguły

ThreadStaticAttribute pola powinny być inicjowane leniwie podczas użycia, a nie za pomocą inicjalizacji wewnętrznej lub wyraźnie w konstruktorze static (Shared w Visual Basic). Konstruktor static inicjuje tylko pole w wątku, który uruchamia konstruktor typu static .

Jak naprawić naruszenie

Aby naprawić naruszenie, usuń inicjalizację inline lub static w konstruktorze. Zamiast tego zainicjuj pole przy pierwszym użyciu.

Przykład

Poniższy fragment kodu pokazuje naruszenie CA2019:

class C
{
    [ThreadStatic]
    private static Object obj = new();
}
Class C
    <ThreadStatic>
    Private Shared obj As New Object()
End Class

Poniższy fragment kodu pokazuje, jak naprawić naruszenie:

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

Kiedy pomijać ostrzeżenia

Można bezpiecznie pominąć ostrzeżenie z tej reguły, ale aplikacja może wykazywać nieoczekiwane zachowanie.

Zobacz też