CA2019:ThreadStatic
字段不应使用内联初始化
属性 | 值 |
---|---|
规则 ID | CA2019 |
标题 | ThreadStatic 字段不应使用内联初始化 |
类别 | 可靠性 |
修复是中断修复还是非中断修复 | 非中断 |
在 .NET 8 中默认启用 | 作为建议 |
原因
使用 ThreadStaticAttribute 注释的字段会以内联方式初始化,或在 static
(Visual Basic 中的 Shared
)构造函数中显式初始化。
规则说明
ThreadStaticAttribute 字段应在使用时延迟初始化,而不是通过内联初始化或在 static
(Visual Basic 中的 Shared
)构造函数中显式初始化。 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
何时禁止显示警告
可以安全地禁止显示来自此规则的警告,但应用可能会表现出意外行为。