CA1861: Evitar matrizes constantes como argumentos
Property | Valor |
---|---|
ID da regra | CA1861 |
Título | Evite matrizes constantes como argumentos |
Categoria | Desempenho |
Correção interruptiva ou sem interrupção | Sem interrupção |
Habilitado por padrão no .NET 8 | Como sugestão |
Causa
Uma matriz constante, de valores literais, é passada para um método por meio de uma 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 reutilizados quando chamados repetidamente, o que implica que uma nova matriz é criada a cada vez. Se a matriz passada não for alterada dentro do método chamado, você deve extraí-la para um campo static readonly
para melhorar o desempenho.
Observação
Se o método chamado alterar a matriz passada ou se você não tiver certeza se o método alteraria a matriz, não extraia a matriz para um campo static readonly
. Fazer isso pode ser uma alteração interruptiva. Nesse caso, é melhor suprimir o aviso.
Como corrigir violações
Extraia matrizes constantes para campos static readonly
se a matriz passada não for alterada dentro do método chamado.
O exemplo a seguir mostra duas violações 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 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
Agora, o valor da matriz é resolvido em tempo de compilação em vez de em tempo de execução, tornando o código mais eficaz.
Quando suprimir avisos
Suprima uma violação dessa regra se:
- A invocação só for executada uma vez.
- A matriz pode ser alterada dentro do método invocado ou você não tem certeza se ela sofrerá mutação.
- Você não está preocupado com o impacto no desempenho da criação de uma matriz constante para cada invocação.
Suprimir um aviso
Para suprimir apenas uma violação, adicione diretivas de pré-processador ao arquivo de origem a fim de desabilitar e, em seguida, reabilitar 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 em um arquivo, uma pasta ou um projeto, defina a severidade como none
no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.CA1861.severity = none
Para obter mais informações, confira Como suprimir avisos de análise de código.