CA1814 : Utilisez des tableaux en escalier à la place de tableaux multidimensionnels

Propriété Value
Identificateur de la règle CA1814
Titre Utilisez des tableaux en escalier à la place de tableaux multidimensionnels
Catégorie Performances
Le correctif est cassant ou non cassant Rupture
Activé par défaut dans .NET 8 Non

Cause

Un membre est déclaré en tant que tableau multidimensionnel, ce qui peut entraîner une perte d’espace pour certains jeux de données.

Description de la règle

Dans un tableau multidimensionnel, chaque élément de chaque dimension a la même taille fixe que les autres éléments de cette dimension. Dans un tableau en escalier, qui est un tableau de tableaux, chaque tableau interne peut être d’une taille différente. En utilisant uniquement l’espace nécessaire pour un tableau donné, aucun espace n’est gaspillé. Cette règle, CA1814, recommande de basculer vers un tableau en escalier pour conserver la mémoire.

Comment corriger les violations

Pour corriger une violation de cette règle, remplacez le tableau multidimensionnel par un tableau en escalier.

Quand supprimer les avertissements

Vous pouvez supprimer un avertissement de cette règle si le tableau multidimensionnel ne gaspille pas d’espace.

Supprimer un avertissement

Si vous voulez supprimer une seule violation, ajoutez des directives de préprocesseur à votre fichier source pour désactiver et réactiver la règle.

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

Pour désactiver la règle sur un fichier, un dossier ou un projet, définissez sa gravité sur none dans le fichier de configuration.

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

Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.

Exemple

L’exemple suivant montre des déclarations pour des tableaux en escalier et multidimensionnels.

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