Partager via


Comparaisons d'égalité (Guide de programmation C#)

Il est parfois nécessaire de comparer deux valeurs pour déterminer si elles sont égales. Dans certains cas, vous testez l'égalité des valeurs, également appelée équivalence ; ce concept signifie que les valeurs contenues dans les deux variables sont égales. Dans d'autres cas, vous devez déterminer si deux variables font référence au même objet sous-jacent en mémoire. Ce type d'égalité est appelé égalité des références ou identité. Cette rubrique décrit ces deux types d'égalités et comporte des liens vers d'autres rubriques fournissant des informations complémentaires.

Égalité des références

L'égalité des références signifie que deux références d'objet renvoient au même objet sous-jacent. Cette situation peut résulter d'une assignation simple, comme illustré dans l'exemple suivant.

using System;
class Test
{
    public int Num { get; set; }
    public string Str { get; set; }

    static void Main()
    {
        Test a = new Test() { Num = 1, Str = "Hi" };
        Test b = new Test() { Num = 1, Str = "Hi" };

        bool areEqual = System.Object.ReferenceEquals(a, b);
        // False:
        System.Console.WriteLine("ReferenceEquals(a, b) = {0}", areEqual);

        // Assign b to a.
        b = a;

        // Repeat calls with different results.
        areEqual = System.Object.ReferenceEquals(a, b);
        // True:
        System.Console.WriteLine("ReferenceEquals(a, b) = {0}", areEqual);

        // Keep the console open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
}

Dans ce code, deux objets sont créés, mais après l'instruction d'assignation, les deux références renvoient au même objet. Par conséquent, les objets présentent une égalité des références. Utilisez la méthode ReferenceEquals pour déterminer si deux références renvoient au même objet.

Le concept d'égalité des références s'applique uniquement aux types référence. Les objets de type valeur ne peuvent pas présenter d'égalité des références car lorsqu'une instance d'un type valeur est assignée à une variable, une copie de la valeur est créée. Par conséquent, deux structures unboxed ne peuvent jamais faire référence au même emplacement en mémoire. En outre, si vous utilisez ReferenceEquals pour comparer deux types valeur, le résultat sera toujours false, même si les valeurs contenues dans les objets sont toutes identiques. Cela est dû au fait que chaque variable est convertie (boxed) en une instance d'objet séparée. Pour plus d'informations, consultez Comment : tester l'égalité des références (Identité) (Guide de programmation C#).

Égalité des valeurs

L'égalité des valeurs signifie que deux objets contiennent la ou les mêmes valeurs. Pour les types valeur primitifs comme int ou bool, les tests d'égalité des valeurs sont des opérations simples. Vous pouvez utiliser l'opérateur ==, comme indiqué dans l'exemple suivant.

int a = GetOriginalValue();
int b = GetCurrentValue();

// Test for value equality. 
if( b == a) 
{
    // The two integers are equal.
}

Pour la plupart des autres types, les tests d'égalité des valeurs sont plus complexes car ils requièrent que vous compreniez comment le type définit cette notion. Pour les classes et structures qui comportent plusieurs champs ou propriétés, l'égalité des valeurs est souvent définie pour indiquer que l'ensemble des champs ou propriétés ont la même valeur. Par exemple, deux objets Point peuvent être définis comme équivalents si pointA.X est égal à pointB.X et pointA.Y est égal à pointB.Y.

Toutefois, il n'est pas nécessaire que l'équivalence soit basée sur tous les champs d'un type. Elle peut être basée sur un sous-ensemble. Lorsque vous comparez des types dont vous n'êtes pas propriétaire, veillez à bien comprendre comment l'équivalence est définie pour ce type. Pour plus d'informations sur la définition de l'égalité des valeurs dans vos propres classes et structures, consultez Comment : définir une égalité de valeurs pour un type (Guide de programmation C#).

Égalité des valeurs pour les valeurs à virgule flottante

Les comparaisons d'égalité des valeurs à virgule flottante (double et float) sont problématiques en raison de l'imprécision des calculs en virgule flottante sur les ordinateurs binaires. Pour plus d'informations, consultez les notes de la rubrique Double.

Rubriques connexes

Titre

Description

Comment : tester l'égalité des références (Identité) (Guide de programmation C#)

Explique comment déterminer si deux variables présentent une égalité des références.

Comment : définir une égalité de valeurs pour un type (Guide de programmation C#)

Indique comment fournir une définition personnalisée de l'égalité des valeurs pour un type.

Guide de programmation C#

Fournit des liens vers des informations détaillées relatives aux fonctionnalités importantes du langage C#, ainsi qu'aux fonctionnalités disponibles en C# via le .NET Framework.

Types (Guide de programmation C#)

Fournit des informations relatives au système de type C# et des liens vers des informations complémentaires.

Voir aussi

Concepts

Guide de programmation C#