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 8 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.