Udostępnij za pośrednictwem


CA1814: Wybieraj tablice nieregularne zamiast wielowymiarowych

Właściwości Wartość
Identyfikator reguły CA1814
Tytuł Wybieraj tablice nieregularne zamiast wielowymiarowych
Kategoria Wydajność
Poprawka powodująca niezgodność lub niezgodność Kluczowa
Domyślnie włączone na platformie .NET 9 Nie.

Przyczyna

Element członkowski jest zadeklarowany jako tablica wielowymiarowa, co może spowodować marnowanie miejsca dla niektórych zestawów danych.

Opis reguły

W tablicy wielowymiarowej każdy element w każdym wymiarze ma taki sam, stały rozmiar jak inne elementy w tym wymiarze. W tablicy postrzępionej , która jest tablicą tablic, każda tablica wewnętrzna może mieć inny rozmiar. Używając tylko miejsca potrzebnego dla danej tablicy, żadne miejsce nie jest marnowane. Ta reguła, CA1814, zaleca przełączenie do tablicy postrzępionej w celu zaoszczędzenia pamięci.

Jak naprawić naruszenia

Aby naprawić naruszenie tej reguły, zmień tablicę wielowymiarową na tablicę postrzępionych.

Kiedy pomijać ostrzeżenia

Można pominąć ostrzeżenie z tej reguły, jeśli tablica wielowymiarowa nie traci miejsca.

Pomijanie ostrzeżenia

Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.

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

Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.

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

Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.

Przykład

W poniższym przykładzie przedstawiono deklaracje dla tablic postrzępionych i wielowymiarowych.

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