CA1825: Evite alocações de array de comprimento zero
Property | valor |
---|---|
ID da regra | CA1825 |
Título | Evite alocações de array de comprimento zero |
Categoria | Desempenho |
A correção está quebrando ou não quebrando | Sem quebra |
Habilitado por padrão no .NET 8 | Como sugestão |
Motivo
Um vazio Array sem elementos é alocado.
Descrição da regra
Inicializar uma matriz de comprimento zero leva a uma alocação de memória desnecessária. Em vez disso, use a instância de matriz vazia alocada estaticamente chamando o Array.Empty método. A alocação de memória é compartilhada em todas as invocações desse método.
Como corrigir violações
Para corrigir uma violação, substitua a alocação de matriz de comprimento zero por uma chamada para Array.Empty. Por exemplo, os dois trechos de código a seguir mostram uma violação da regra e como corrigi-la:
class C
{
public void M1()
{
// Violates rule CA1825.
var a = new int[0];
}
}
class C
{
public void M1()
{
// Resolves rule CA1825 violation.
var a = System.Array.Empty<int>();
}
}
Gorjeta
Uma correção de código está disponível para essa regra no Visual Studio. Para usá-lo, posicione o cursor sobre a alocação da matriz e pressione Ctrl+. (ponto). Escolha Usar Array.Empty na lista de opções apresentada.
Quando suprimir avisos
É seguro suprimir uma violação desta regra se você não estiver preocupado com a alocação de memória adicional.
Nota
Poderá ver avisos falsos positivos desta regra se todas as seguintes situações se aplicarem:
- Você está usando o Visual Studio 2022 versão 17.5 ou posterior com uma versão mais antiga do SDK do .NET, ou seja, .NET 6 ou anterior.
- Você está usando os analisadores do SDK do .NET 6 ou uma versão mais antiga dos pacotes do analisador, como Microsoft.CodeAnalysis.FxCopAnalyzers.
- Você está usando uma matriz de comprimento zero como um argumento de atributo, mais comumente como um
params
parâmetro.
Os falsos positivos são devidos a uma mudança de quebra no compilador C#. Considere o uso de um analisador mais recente que contenha a correção para os avisos de falsos positivos. Atualize para Microsoft.CodeAnalysis.NetAnalyzers versão 7.0.0-preview1.22464.1 ou mais recente ou use os analisadores do SDK do .NET 7.
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 CA1825
// The code that's violating the rule is on this line.
#pragma warning restore CA1825
Para desabilitar a regra para um arquivo, pasta ou projeto, defina sua severidade como none
no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.CA1825.severity = none
Para obter mais informações, consulte Como suprimir avisos de análise de código.