CA2013 : Ne pas utiliser ReferenceEquals pour les types valeur

Propriété Valeur
Identificateur de la règle CA2013
Titre N'utilisez pas l'opérateur ReferenceEquals avec des types de valeur
Catégorie Fiabilité
Le correctif a un effet disruptif ou non disruptif Sans rupture
Activé par défaut dans .NET 10 Comme avertissement
Langues applicables C# et Visual Basic

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