CA1814: Preferir matrices escalonadas antes que multidimensionales

Propiedad Value
Identificador de la regla CA1814
Título Preferir matrices escalonadas antes que multidimensionales
Categoría Rendimiento
La corrección es problemática o no problemática Problemático
Habilitado de forma predeterminada en .NET 8 No

Causa

Un miembro se declara como una matriz multidimensional, lo que puede dar lugar al desperdicio de espacio para algunos conjuntos de datos.

Descripción de la regla

En una matriz multidimensional, cada elemento de cada dimensión tiene el mismo tamaño fijo que los demás elementos de esa dimensión. En una matriz escalonada, que es una matriz de matrices, cada matriz interna puede tener un tamaño diferente. Al usar solo el espacio necesario para una matriz determinada, no se desperdicia ningún espacio. Esta regla, CA1814, recomienda cambiar a una matriz escalonada para conservar la memoria.

Cómo corregir infracciones

Para corregir una infracción de esta regla, cambie la matriz multidimensional por una matriz escalonada.

Cuándo suprimir las advertencias

Una advertencia de esta regla se puede suprimir si la matriz multidimensional no desperdicia espacio.

Supresión de una advertencia

Si solo quiere suprimir una única infracción, agregue directivas de preprocesador al archivo de origen para deshabilitar y volver a habilitar la regla.

#pragma warning disable CA1814
// The code that's violating the rule is on this line.
#pragma warning restore CA1814

Para deshabilitar la regla de un archivo, una carpeta o un proyecto, establezca su gravedad en none del archivo de configuración.

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

Para obtener más información, consulte Procedimiento para suprimir advertencias de análisis de código.

Ejemplo

En el ejemplo siguiente se muestran las declaraciones de matrices escalonadas y multidimensionales.

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