C# Language Comparaisons avec les types de valeur encadrés


Exemple

Si des types de valeur sont affectés à des variables de type object ils sont encadrés - la valeur est stockée dans une instance de System.Object . Cela peut entraîner des conséquences imprévues lors de la comparaison de valeurs avec == , par exemple:

object left = (int)1;  // int in an object box
object right = (int)1; // int in an object box

var comparison1 = left == right;      // false

Cela peut être évité en utilisant la méthode Equals surchargée, qui donnera le résultat attendu.

var comparison2 = left.Equals(right); // true

Alternativement, on pourrait faire la même chose en désencapsulant les variables left et right afin de comparer les valeurs int :

var comparison3 = (int)left == (int)right; // true