CA2019: ThreadStatic 欄位不應該使用內嵌初始化

屬性
規則識別碼 CA2019
標題 ThreadStatic 欄位不應該使用內嵌初始化
類別 可靠性
修正程式是中斷或非中斷 不中斷
預設在 .NET 8 中啟用 建議

原因

標註 ThreadStaticAttribute 的欄位會以內嵌或明確的方式在 static (Visual Basic 中的 Shared) 建構函式中初始化。

檔案描述

ThreadStaticAttribute欄位應該在使用時延遲初始化,而不是在 內嵌初始化或在 ( Shared 在 Visual Basic 中) 建構函式中 static 明確初始化。 建 static 構函式只會初始化執行類型 static 建構函式之執行緒上的欄位。

如何修正違規

若要修正違規,請移除內嵌或 static 建構函式初始化。 相反地,在第一次使用時初始化 欄位。

範例

下列程式碼片段顯示 CA2019 的違規:

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

下列程式碼片段示範如何修正違規:

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

隱藏警告的時機

隱藏此規則的警告是安全的,但您的應用程式可能會表現出非預期的行為。

另請參閱