通过


CA2019:ThreadStatic 字段不应使用内联初始化

属性
规则 ID CA2019
标题 ThreadStatic 字段不应使用内联初始化
类别 可靠性
修复是导致破坏性更改还是非破坏性更改 非中断
在 .NET 10 中默认启用 作为一种建议
适用的语言 C# 和 Visual Basic

原因

使用 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

何时禁止显示警告

可以安全地禁止显示来自此规则的警告,但应用可能会表现出意外行为。

另请参阅