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