Condividi tramite


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