CA1814: Dejte přednost zubatým polím před vícerozměrnými poli

Vlastnost Hodnota
ID pravidla CA1814
Název Upřednostněte zubatá pole před vícerozměrnými
Kategorie Výkon
Oprava, která může být destruktivní nebo nedestruktivní Přerušující
Povoleno ve výchozím nastavení v .NET 10 Ne
Příslušné jazyky C# a Visual Basic

Příčina

Člen je deklarován jako multidimenzionální pole, což může vést k plýtvání prostorem pro některé datové sady.

Popis pravidla

V multidimenzionálním poli má každý prvek v každé dimenzi stejnou pevnou velikost jako ostatní prvky v této dimenzi. V zubatém poli, což je pole polí, může mít každé vnitřní pole jinou velikost. Použitím pouze tolik prostoru, kolik je pro dané pole potřeba, se žádné místo neplýtvá. Toto pravidlo CA1814 doporučuje přepnout na roztřepené pole, aby se ušetřila paměť.

Jak opravit porušení

Chcete-li opravit porušení tohoto pravidla, změňte multidimenzionální pole na zubaté pole.

Kdy potlačit upozornění

Pokud multidimenzionální pole nevyhazuje místo, je v pořádku potlačit upozornění z tohoto pravidla.

Potlačení upozornění

Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.

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

Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none konfiguračním souboru.

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

Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.

Příklad

Následující příklad ukazuje deklarace pro zubatá a multidimenzionální pole.

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