Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
| Propriedade | Valor |
|---|---|
| ID da regra | CA1861 |
| Título | Evite matrizes constantes como argumentos |
| Categoria | Desempenho |
| Correção interruptiva ou sem interrupção | Inquebrável |
| Habilitado por padrão no .NET 10 | Como sugestão |
| Idiomas aplicáveis | C# e Visual Basic |
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 reutilizadas quando são chamadas repetidamente, o que implica que uma nova matriz é criada toda vez. Se a matriz passada não for alterada dentro do método chamado, considere extraí-la para um campo static readonly a fim de melhorar o desempenho.
Observação
Se o método chamado modificar o array passado ou se você não tiver certeza de que o método modificaria o array, não extraia o array 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 runtime, tornando o código mais performante.
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.