Sdílet prostřednictvím


CA1814: Preferujte vícenásobná pole více než multidimenzionální

Vlastnost Hodnota
ID pravidla CA1814
Název Upřednostněte vícenásobná pole před multidimenzionálními
Kategorie Výkon
Oprava způsobující chybu nebo chybu způsobující chybu Narušující
Povoleno ve výchozím nastavení v .NET 9 No

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 liché matici, což je matice polí, může mít každá vnitřní matice jinou velikost. Použitím prostoru potřebného pro dané pole se nevymýtá mezera. Toto pravidlo CA1814 doporučuje přepnout na zaseknutou matici, aby se ušetřila paměť.

Jak opravit porušení

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

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