Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
| Propriété | Valeur |
|---|---|
| Identificateur de la règle | CA1512 |
| Titre | Utiliser l’assistance de levée ArgumentOutOfRangeException |
| Catégorie | Maintenabilité |
| Le correctif a un effet disruptif ou non disruptif | Non cassant |
| Activé par défaut dans .NET 10 | À titre de suggestion |
| Langues applicables | C# et Visual Basic |
Cause
Le code vérifie si un argument est inférieur ou supérieur à une valeur donnée, puis lève conditionnellement un ArgumentOutOfRangeException.
Description de la règle
Les vérifications d’argument ont un impact important sur la taille du code et dominent souvent le code pour les petites fonctions et les setters de propriétés. Ces vérifications empêchent l'intégration en ligne et provoquent une pollution significative du cache d'instructions. Les méthodes d’assistance pour lever une exception, comme ArgumentOutOfRangeException.ThrowIfGreaterThan, sont plus simples et plus efficaces que les blocs if qui construisent une nouvelle instance d’exception.
Exemple
L’extrait de code suivant montre deux violations de CA1512 :
void M(int arg)
{
if (arg is 0)
throw new ArgumentOutOfRangeException(nameof(arg));
if (arg < 0)
throw new ArgumentOutOfRangeException(nameof(arg));
if (arg <= 0)
throw new ArgumentOutOfRangeException(nameof(arg));
if (arg <= 42)
throw new ArgumentOutOfRangeException(nameof(arg));
if (arg < 42)
throw new ArgumentOutOfRangeException(nameof(arg));
if (arg > 42)
throw new ArgumentOutOfRangeException(nameof(arg));
if (arg >= 42)
throw new ArgumentOutOfRangeException(nameof(arg));
if (arg == 42)
throw new ArgumentOutOfRangeException(nameof(arg));
if (arg != 42)
throw new ArgumentOutOfRangeException(nameof(arg));
}
L’extrait de code suivant montrent les correctifs :
void M(int arg)
{
ArgumentOutOfRangeException.ThrowIfZero(arg);
ArgumentOutOfRangeException.ThrowIfNegative(arg);
ArgumentOutOfRangeException.ThrowIfNegativeOrZero(arg);
ArgumentOutOfRangeException.ThrowIfLessThanOrEqual(arg, 42);
ArgumentOutOfRangeException.ThrowIfLessThan(arg, 42);
ArgumentOutOfRangeException.ThrowIfGreaterThan(arg, 42);
ArgumentOutOfRangeException.ThrowIfGreaterThanOrEqual(arg, 42);
ArgumentOutOfRangeException.ThrowIfEqual(arg, 42);
ArgumentOutOfRangeException.ThrowIfNotEqual(arg, 42);
}
Comment corriger les violations
Remplacez le bloc if qui lève l’exception par un appel à l’une des méthodes d’assistance de levée suivantes :
- ArgumentOutOfRangeException.ThrowIfZero<T>(T, String)
- ArgumentOutOfRangeException.ThrowIfNegative<T>(T, String)
- ArgumentOutOfRangeException.ThrowIfNegativeOrZero<T>(T, String)
- ArgumentOutOfRangeException.ThrowIfLessThanOrEqual<T>(T, T, String)
- ArgumentOutOfRangeException.ThrowIfLessThan<T>(T, T, String)
- ArgumentOutOfRangeException.ThrowIfGreaterThanOrEqual<T>(T, T, String)
- ArgumentOutOfRangeException.ThrowIfGreaterThan<T>(T, T, String)
- ArgumentOutOfRangeException.ThrowIfEqual<T>(T, T, String)
- ArgumentOutOfRangeException.ThrowIfNotEqual<T>(T, T, String)
Ou, dans Visual Studio, utilisez le menu Ampoule pour corriger automatiquement votre code.
Quand supprimer les avertissements
Il est sûr de supprimer une violation de cette règle si vous n’êtes pas préoccupé par la maintenance de votre code. Il est également très facile de supprimer les violations qui sont identifiées comme étant de faux positifs.
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 CA1512
// The code that's violating the rule is on this line.
#pragma warning restore CA1512
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.CA1512.severity = none
Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.