CA1814: Preferir matrizes denteadas a matrizes multidimensionais

Property Valor
ID da regra CA1814
Título Preferir matrizes denteadas a matrizes multidimensionais
Categoria Desempenho
Correção interruptiva ou sem interrupção Quebra
Habilitado por padrão no .NET 8 Não

Causa

Um membro é declarado 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 dos outros elementos nessa dimensão. Em uma matriz denteada, que é uma matriz de matrizes, cada matriz interna pode ter tamanho diferente. Usando apenas o espaço necessário para determinada matriz, nenhum espaço é desperdiçado. Essa regra, CA1814, recomenda alternar para uma matriz denteada visando a conservar a memória.

Como corrigir violações

Para corrigir uma violação dessa regra, mude a matriz multidimensional para denteada.

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

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

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

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

Exemplo

O exemplo a seguir mostra declarações para matrizes denteadas 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}
                            };
}