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 ==.

Voir aussi