CA2019:ThreadStatic
フィールドでインライン初期化を使用しないでください
プロパティ | 値 |
---|---|
ルール ID | CA2019 |
Title | 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
どのようなときに警告を抑制するか
このルールからの警告を抑制しても問題ありませんが、アプリで予期しない動作が発生する可能性があります。
こちらもご覧ください
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET