CA1814: Preferire matrici di matrici rispetto a matrici multidimensionali
Proprietà | valore |
---|---|
ID regola | CA1814 |
Titolo | Preferire matrici di matrici rispetto a matrici multidimensionali |
Categoria | Prestazioni |
Correzione che causa un'interruzione o un'interruzione | Interruzione |
Abilitato per impostazione predefinita in .NET 8 | No |
Causa
Un membro viene dichiarato come matrice multidimensionale, che può comportare uno spreco di spazio per alcuni set di dati.
Descrizione regola
In una matrice multidimensionale ogni elemento di ogni dimensione ha le stesse dimensioni fisse degli altri elementi della dimensione. In una matrice frastagliata, ovvero una matrice di matrici, ogni matrice interna può essere di dimensioni diverse. Usando solo lo spazio necessario per una determinata matrice, non viene sprecato spazio. Questa regola, CA1814, consiglia di passare a una matrice irregolare per risparmiare memoria.
Come correggere le violazioni
Per correggere una violazione di questa regola, modificare la matrice multidimensionale in una matrice frastagliata.
Quando eliminare gli avvisi
È consigliabile eliminare un avviso da questa regola se la matrice multidimensionale non sprecare spazio.
Eliminare un avviso
Se si vuole eliminare una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare la regola.
#pragma warning disable CA1814
// The code that's violating the rule is on this line.
#pragma warning restore CA1814
Per disabilitare la regola per un file, una cartella o un progetto, impostarne la gravità none
su nel file di configurazione.
[*.{cs,vb}]
dotnet_diagnostic.CA1814.severity = none
Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.
Esempio
Nell'esempio seguente vengono illustrate le dichiarazioni per matrici frastagliate e multidimensionali.
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}
};
}