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