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ée par défaut dans .NET 9 | 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}
};
}