CA2019: ThreadStatic alanlar satır içi başlatma kullanmamalıdır

Özellik Değer
Kural Kimliği CA2019
Başlık ThreadStatic alanlar satır içi başlatma kullanmamalıdır
Kategori Güvenilirlik
Düzeltme bozucu ya da bozmayan olabilir Kesintisiz
.NET 10'da varsayılan olarak etkin Öneri olarak
Geçerli diller C# ve Visual Basic

Neden

ThreadStaticAttribute ek açıklaması olan bir alan satır içinde veya açıkça bir static (Visual Basic’te Shared) oluşturucusunda başlatılır.

Kural açıklaması

ThreadStaticAttribute alanlar, tembel bir şekilde ihtiyaç duyulduğunda başlatılmalıdır; satır içi başlatma veya bir static (Shared Visual Basic'te) oluşturucu ile açıkça başlatma yapılmamalıdır. Oluşturucu static yalnızca türün static oluşturucuyu çalıştıran iş parçacığında alanı başlatır.

İhlal nasıl düzeltilir?

Bir ihlali düzeltmek için satır içi veya static oluşturucu başlatmasını kaldırın. Bunun yerine, alanı ilk kullanımda başlatın.

Örnek

Aşağıdaki kod parçacığı CA2019 ihlalini gösterir:

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

Aşağıdaki kod parçacığı bir ihlalin nasıl düzeltileceğini gösterir:

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

Uyarıların ne zaman bastırılması gerekiyor?

Bu kuraldan gelen bir uyarıyı engellemek güvenlidir, ancak uygulamanız beklenmeyen davranışlar gösterebilir.

Ayrıca bkz.