Partilhar via


CA1814: Prefira matrizes irregulares em vez de multidimensionais

Propriedade valor
ID da regra CA1814
Cargo Prefira matrizes irregulares em vez de multidimensionais
Categoria Desempenho
A correção está quebrando ou não quebrando Quebrando
Habilitado por padrão no .NET 8 Não

Causa

Um membro é declarado como uma matriz multidimensional, o que pode resultar em espaço desperdiçado para alguns conjuntos de dados.

Descrição da regra

Em uma matriz multidimensional, cada elemento em cada dimensão tem o mesmo tamanho fixo que os outros elementos nessa dimensão. Em uma matriz irregular, que é uma matriz de matrizes, cada matriz interna pode ser de um tamanho diferente. Usando apenas o espaço necessário para uma determinada matriz, nenhum espaço é desperdiçado. Esta regra, CA1814, recomenda mudar para uma matriz irregular para conservar memória.

Como corrigir violações

Para corrigir uma violação dessa regra, altere a matriz multidimensional para uma matriz irregular.

Quando suprimir avisos

Não há problema em suprimir um aviso dessa regra se a matriz multidimensional não desperdiçar espaç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 CA1814
// The code that's violating the rule is on this line.
#pragma warning restore CA1814

Para desabilitar a regra de um arquivo, pasta ou projeto, defina sua gravidade como none no arquivo de configuração.

[*.{cs,vb}]
dotnet_diagnostic.CA1814.severity = none

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

Exemplo

O exemplo a seguir mostra declarações para matrizes irregulares e multidimensionais.

Imports System

Public Class ArrayHolder
    Private jaggedArray As Integer()() =  {New Integer() {1, 2, 3, 4}, _
                                           New Integer() {5, 6, 7}, _
                                           New Integer() {8}, _
                                           New Integer() {9}}
    
    Private multiDimArray As Integer(,) =  {{1, 2, 3, 4}, _
                                            {5, 6, 7, 0}, _
                                            {8, 0, 0, 0}, _
                                            {9, 0, 0, 0}}
End Class
public class ArrayHolder
{
    int[][] jaggedArray = { new int[] {1,2,3,4},
                            new int[] {5,6,7},
                            new int[] {8},
                            new int[] {9}
                          };

    int[,] multiDimArray = {{1,2,3,4},
                             {5,6,7,0},
                             {8,0,0,0},
                             {9,0,0,0}
                            };
}