Compartilhar via


CA1825: Evitar alocações de matriz de comprimento zero

Property Valor
ID da regra CA1825
Título Evitar alocações de matriz de comprimento zero
Categoria Desempenho
Correção interruptiva ou sem interrupção Sem interrupção
Habilitado por padrão no .NET 9 Como sugestão

Causa

Um Array vazio sem elementos é alocado.

Descrição da regra

Inicializar uma matriz de comprimento zero resultará em uma alocação de memória desnecessária. Em vez disso, use a instância de matriz vazia alocada estaticamente chamando o método Array.Empty. 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 da matriz de comprimento zero por uma chamada para Array.Empty. Por exemplo, os dois snippets 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>();
    }
}

Dica

Uma correção de código está disponível para essa regra no Visual Studio. Para usá-la, posicione o cursor sobre a alocação de matriz e pressione Ctrl+. (ponto). Escolha Usar Array.Empty na lista de opções apresentadas.

Correção de código para CA1825: usar matriz vazia

Quando suprimir avisos

É seguro suprimir uma violação dessa regra se você não estiver preocupado com a alocação de memória adicional.

Observação

Você pode ver avisos de falsos positivos desta regra se todos os itens a seguir 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 parâmetro params.

Os falsos positivos são devido a uma alteração interruptiva no compilador de C#. Considere usar 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

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 CA1825
// The code that's violating the rule is on this line.
#pragma warning restore CA1825

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.CA1825.severity = none

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

Confira também