Quelle décision dois-je prendre à propos de Equals(), ReferenceEquals() et == à partir des résultats suivants? Que produisent-ils réellement?Valeur par rapport à la référence
#region
int integer = 1;
int integer2 = integer;
bool referenceEquality = (integer == integer2);//true
bool valueEquality = integer.Equals(integer2);//true
bool valueEqualityMore = object.Equals(integer, integer2);//true
bool valueEqualityMoreMore = object.ReferenceEquals(integer, integer2);//false
#endregion
#region
int integer = 1;
int integer2 = 1;
bool referenceEquality = (integer == integer2);//true
bool valueEquality = integer.Equals(integer2);//true
bool valueEqualityMore = object.Equals(integer, integer2);//true
bool valueEqualityMoreMore = object.ReferenceEquals(integer, integer2);//false
#endregion
#region
MyClass obj = new MyClass(1, "Hello");
MyClass obj2 = obj;
bool referenceEquality = (obj == obj2);//true
bool valueEquality = obj.Equals(obj2);//true
bool valueEqualityMore = object.Equals(obj, obj2);//true
bool valueEqualityMoreMore = object.ReferenceEquals(obj, obj2);//true
#endregion
#region
MyClass obj = new MyClass(1, "Hello");
MyClass obj2 = new MyClass(1, "Hello");
bool referenceEquality = (obj == obj2);//false
bool valueEquality = obj.Equals(obj2);//false
bool valueEqualityMore = object.Equals(obj, obj2);//false
bool valueEqualityMoreMore = object.ReferenceEquals(obj, obj2);//false
#endregion
Hell! Je ne comprends rien.
Pour moi, referenceEquals() du 1er bloc doit renvoyer true. == dans le second bloc doit retourner false (car les références sont différentes). Et, les deux Equals() dans le 4ème bloc devraient renvoyer vrai (car leurs valeurs sont identiques).
Pouvez-vous préciser votre question, en particulier: 1) de ces résultats ne vous trouvez surprenant 2) De quelle décision parlez-vous – Mathias
Bon commentaire. Voir la mise à jour. – anonymous
referenceEquals compare la référence des instances d'objet, puisque les valeurs int sont des boîtes de deux objets différents dont la référence est différente. == Par défaut, comparez les références afin que les deux instances de MyClass, même ayant le même état, aient une référence différente car ce sont deux objets différents. – Elisha