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}
};
}