Share via


CA1814: Föredrar ojämna matriser framför flerdimensionella

Property Värde
Regel-ID CA1814
Rubrik Föredrar ojämna matriser framför flerdimensionella
Kategori Prestanda
Korrigeringen är icke-bakåtkompatibel Bryta
Aktiverad som standard i .NET 8 Nej

Orsak

En medlem deklareras som en flerdimensionell matris, vilket kan resultera i bortkastat utrymme för vissa datauppsättningar.

Regelbeskrivning

I en flerdimensionell matris har varje element i varje dimension samma fasta storlek som de andra elementen i den dimensionen. I en ojämn matris, som är en matris med matriser, kan varje inre matris ha en annan storlek. Genom att bara använda det utrymme som behövs för en viss matris slösas inget utrymme bort. Den här regeln, CA1814, rekommenderar att du växlar till en ojämn matris för att spara minne.

Så här åtgärdar du överträdelser

Om du vill åtgärda ett brott mot den här regeln ändrar du den flerdimensionella matrisen till en ojämn matris.

När du ska ignorera varningar

Det är okej att ignorera en varning från den här regeln om den flerdimensionella matrisen inte slösar bort utrymme.

Ignorera en varning

Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.

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

Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none i konfigurationsfilen.

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

Mer information finns i Så här utelämnar du kodanalysvarningar.

Exempel

I följande exempel visas deklarationer för ojämna och flerdimensionella matriser.

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