Freigeben über


CA1814: Jagged Arrays den mehrdimensionalen Arrays vorziehen.

Eigenschaft Wert
Regel-ID CA1814
Titel Bevorzugen Sie gezackte Arrays gegenüber mehrdimensionalen Arrays.
Kategorie Leistung
Fix führt zu Unterbrechungen oder bleibt funktionsfähig Eilmeldung
Standardmäßig in .NET 10 aktiviert Nein
Anwendbare Sprachen C# und Visual Basic

Ursache

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

Regelbeschreibung

In einem mehrdimensionalen 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.

So beheben Sie Verstöße

Um einen Verstoß gegen diese Regel zu beheben, ändern Sie das mehrdimensionale Array in ein verzahntes 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 auf none in der Konfigurationsdatei 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 Arrays 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}
                            };
}