Partilhar via


CA1861: Evite matrizes constantes como argumentos

Property valor
ID da regra CA1861
Título Evite matrizes constantes como argumentos
Categoria Desempenho
A correção está quebrando ou não quebrando Sem quebra
Habilitado por padrão no .NET 8 Como sugestão

Motivo

Uma matriz constante de valores literais é passada para um método por meio de invocação regular ou invocação de método de extensão.

Descrição da regra

Matrizes constantes passadas como argumentos não são reutilizadas quando chamadas repetidamente, o que implica que uma nova matriz é criada a cada vez. Se a matriz passada não for mutada dentro do método chamado, considere extraí-la para um static readonly campo para melhorar o desempenho.

Nota

Se o método chamado mutar a matriz passada ou se você não tiver certeza se o método mutaria a matriz, não extraia a matriz para um static readonly campo. Fazê-lo pode ser uma mudança de rutura. Neste caso, é melhor suprimir o aviso.

Como corrigir violações

Extraia matrizes constantes para static readonly campos se a matriz passada não for mutada dentro do método chamado.

O exemplo a seguir mostra uma violação da regra:

// A method argument
string message = string.Join(" ", new[] { "Hello", "world!" });
' A method argument
Dim message As String = String.Join(" ", {"Hello", "world!"})

O exemplo a seguir mostra como a violação dessa regra é corrigida extraindo o argumento para um static readonly campo.

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

Agora, o valor da matriz é resolvido em tempo de compilação em vez de em tempo de execução, tornando o código mais eficiente.

Quando suprimir avisos

Suprima uma violação desta regra se:

  • A invocação só é executada uma vez.
  • A matriz pode ser mutada dentro do método invocado, ou você não tem certeza se ela seria mutada.
  • Você não está preocupado com o impacto no desempenho da criação de uma matriz constante para cada invocação.

Suprimir um aviso

Se você quiser apenas suprimir uma única violação, adicione diretivas de pré-processador ao seu arquivo de origem para desativar e, em seguida, reativar a regra.

#pragma warning disable CA1861
// The code that's violating the rule is on this line.
#pragma warning restore CA1861

Para desabilitar a regra para um arquivo, pasta ou projeto, defina sua severidade como none no arquivo de configuração.

[*.{cs,vb}]
dotnet_diagnostic.CA1861.severity = none

Para obter mais informações, consulte Como suprimir avisos de análise de código.