CA2019: ThreadStatic
字段不應該使用內嵌初始化
屬性 | 值 |
---|---|
規則識別碼 | CA2019 |
職稱 | ThreadStatic 欄位不應該使用內嵌初始化 |
類別 | 可靠性 |
修正程式是中斷或非中斷 | 不中斷 |
預設在 .NET 9 中啟用 | 建議 |
原因
標註 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
隱藏警告的時機
隱藏此規則的警告是安全的,但您的應用程式可能會表現出非預期的行為。