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 9 | 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 ele seria mutado.
- 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 de um arquivo, pasta ou projeto, defina sua gravidade 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.