CA1861: Evitar matrices constantes como argumentos
Propiedad | Value |
---|---|
Identificador de la regla | CA1861 |
Título | Evitar matrices constantes como argumentos |
Categoría | Rendimiento |
La corrección es problemática o no problemática | Poco problemático |
Habilitado de forma predeterminada en .NET 9 | Como sugerencia |
Causa
Matriz constante, de valores literales, que se pasa a un método mediante la invocación regular o la invocación del método de extensión.
Descripción de la regla
Las matrices constantes pasadas como argumentos no se reutilizan cuando se las llama repetidamente, lo que implica que se crea una nueva matriz cada vez. Si la matriz pasada no muta en el método llamado, considere la posibilidad de extraerla en un campo static readonly
para mejorar el rendimiento.
Nota
Si el método llamado muta la matriz pasada o si no está seguro de si el método mutaría la matriz, no extraiga la matriz en un campo static readonly
. Si lo hace, podría ser un cambio importante. En este caso, es mejor suprimir la advertencia en su lugar.
Cómo corregir infracciones
Extraiga matrices de constantes en campos static readonly
si la matriz pasada no muta en el método llamado.
En el ejemplo siguiente se muestra una infracción de la regla:
// A method argument
string message = string.Join(" ", new[] { "Hello", "world!" });
' A method argument
Dim message As String = String.Join(" ", {"Hello", "world!"})
En el ejemplo siguiente se muestra cómo se corrige la infracción de esta regla mediante la extracción del argumento en un campo static readonly
.
private static readonly string[] array = new[] { "Hello" , "world!" };
private string GetMessage()
{
return string.Join(" ", array);
}
Private Shared ReadOnly array As String() = {"Hello", "world!"}
Private Function GetMessage() As String
Return String.Join(" ", array)
End Function
Ahora, el valor de la matriz se resuelve en tiempo de compilación en lugar de en tiempo de ejecución, lo que hace que el código sea más eficaz.
Cuándo suprimir las advertencias
Suprima una infracción de esta regla si:
- La invocación solo se ejecuta una vez.
- La matriz podría mutar en el método invocado o no está seguro de si mutaría.
- No le preocupa el impacto en el rendimiento de la creación de una matriz constante para cada invocación.
Supresión de una advertencia
Si solo quiere suprimir una única infracción, agregue directivas de preprocesador al archivo de origen para deshabilitar y volver a habilitar la regla.
#pragma warning disable CA1861
// The code that's violating the rule is on this line.
#pragma warning restore CA1861
Para deshabilitar la regla de un archivo, una carpeta o un proyecto, establezca su gravedad en none
del archivo de configuración.
[*.{cs,vb}]
dotnet_diagnostic.CA1861.severity = none
Para obtener más información, consulte Procedimiento para suprimir advertencias de análisis de código.