CA1814: Jagged Arrays mehrdimensionalen Arrays vorziehen.

Eigenschaft Wert
Regel-ID CA1814
Titel Jagged Arrays mehrdimensionalen Arrays vorziehen.
Kategorie Leistung
Fix führt oder führt nicht zur Unterbrechung Breaking
Standardmäßig in .NET 8 aktiviert Nein

Ursache

Ein Member wird als mehrdimensionales Array deklariert, was zu einem Verlust von Speicherplatz für einige Datasets führen kann.

Regelbeschreibung

In einem dimensionalen Array hat jedes Element in jeder Dimension dieselbe, festgelegte Größe wie die anderen Elemente in dieser Dimension. In einem Jagged Array, bei dem es sich um ein Array von Arrays handelt, kann jedes innere Array eine andere Größe aufweisen. Wenn nur der für ein bestimmtes Array benötigte Speicherplatz verwendet wird, wird kein Speicherplatz verschwendet. Diese Regel, CA1814, empfiehlt, zu einem Jagged Array zu wechseln, um Speicherplatz zu sparen.

Behandeln von Verstößen

Um einen Verstoß dieser Regel zu beheben, ändern Sie das mehrdimensionale Array zu einem Jagged Array.

Wann sollten Warnungen unterdrückt werden?

Es ist in Ordnung, eine Warnung aus dieser Regel zu unterdrücken, wenn das mehrdimensionale Array keinen Speicherplatz verschwendet.

Unterdrücken einer Warnung

Um nur eine einzelne Verletzung zu unterdrücken, fügen Sie der Quelldatei Präprozessoranweisungen hinzu, um die Regel zu deaktivieren und dann wieder zu aktivieren.

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

Um die Regel für eine Datei, einen Ordner oder ein Projekt zu deaktivieren, legen Sie den Schweregrad in der Konfigurationsdatei auf none fest.

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

Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.

Beispiel

Das folgende Beispiel zeigt Deklarationen für Jagged und mehrdimensionale Arrays.

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