CA2013 : Ne pas utiliser ReferenceEquals avec des types valeur
Propriété | Value |
---|---|
Identificateur de la règle | CA2013 |
Titre | Ne pas utiliser ReferenceEquals avec des types valeur |
Catégorie | Fiabilité |
Le correctif est cassant ou non cassant | Sans rupture |
Activé par défaut dans .NET 8 | À titre d’avertissement |
Cause
Utilisation de la méthode System.Object.ReferenceEquals pour tester un ou plusieurs types valeur pour l’égalité.
Description de la règle
Lors de la comparaison des valeurs à l’aide de ReferenceEquals, si objA et objB sont des types valeur, ils sont boxés avant qu’ils ne soient passés à la méthode ReferenceEquals. Cela signifie que même si objA et objB représentent la même instance d’un type valeur, la méthode ReferenceEquals retourne néanmoins false, comme montré dans l’exemple suivant.
Comment corriger les violations
Pour corriger la violation, remplacez-la par une vérification d’égalité plus appropriée comme ==
.
int int1 = 1, int2 = 1;
// Violation occurs, returns false.
Console.WriteLine(Object.ReferenceEquals(int1, int2)); // false
// Use appropriate equality operator or method instead
Console.WriteLine(int1 == int2); // true
Console.WriteLine(object.Equals(int1, int2)); // true
Quand supprimer les avertissements
Il n’est pas sûr de supprimer un avertissement de cette règle. Nous vous recommandons d’utiliser l’opérateur d’égalité plus approprié, tel que ==
.