Nota
L'accés a aquesta pàgina requereix autorització. Podeu provar d'iniciar la sessió o de canviar els directoris.
L'accés a aquesta pàgina requereix autorització. Podeu provar de canviar els directoris.
CA2019: Los campos
| Propiedad | Valor |
|---|---|
| Identificador de la regla | CA2019 |
| Título | Los campos ThreadStatic no deben usar la inicialización inline. |
| Categoría | Confiabilidad |
| La corrección interrumpe o no interrumpe | Sin interrupción |
| Habilitado de forma predeterminada en .NET 10 | Como sugerencia |
| Idiomas aplicables | C# y Visual Basic |
Causa
Un campo anotado con ThreadStaticAttribute se inicializa en línea o explícitamente en un constructor static (Shared en Visual Basic).
Descripción de la regla
Los campos ThreadStaticAttribute se deben inicializar de forma diferida al usarse y no con inicialización en línea o explícitamente en un constructor static (Shared en Visual Basic). Un constructor static solo inicializa el campo en el subproceso que ejecuta el constructor del tipo static.
Corrección de una infracción
Para corregir una infracción, quite la inicialización en línea o la del constructor static. En su lugar, inicialice el campo en el primer uso.
Ejemplo
En el siguiente fragmento de código se muestra una infracción de la regla CA2019:
class C
{
[ThreadStatic]
private static Object obj = new();
}
Class C
<ThreadStatic>
Private Shared obj As New Object()
End Class
En el fragmento de código siguiente se muestra cómo corregir una infracción:
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
Cuándo suprimir las advertencias
Es seguro suprimir una advertencia de esta regla, pero la aplicación podría presentar un comportamiento inesperado.