65 votes

Surpassant la méthode Equals dans Structs

J'ai regardé de remplacement des lignes directrices pour les structures, mais tout ce que je peux trouver est pour les classes.

Au début, je pensais que je n'aurais pas besoin de vérifier pour voir si l'objet passé était nulle, que les structures sont des types valeur et ne peut pas être null. Mais maintenant que j'y pense, d'égal à égal signature est

public bool Equals(object obj)

il semble que rien n'empêche l'utilisateur de mon struct essayer pour comparer avec une référence arbitraire type.

Mon deuxième point concerne le casting j'ai (je pense) d'avoir à faire avant que je compare mon champs privés dans ma structure. Comment suis-je censé convertir l'objet de mon struct type? C# as mot-clé semble ne convient que pour les types référence.

Merci

85voto

James Curran Points 55356
struct MyStruct 
{
   public override bool Equals(object obj) 
   {
       if (!(obj is MyStruct))
          return false;

       MyStruct mys = (MyStruct) obj;
       // compare elements here

   }

}

13voto

Albus Dumbledore Points 3097

Je suppose que, si l'on utilise .NET 4.5, on peut utiliser la valeur par défaut de mise en œuvre comme indiqué dans la documentation:

Lorsque vous définissez votre propre type, ce type hérite des fonctionnalités définies par la méthode Equals de son type de base.

ValueType.Est égale à: la Valeur de l'égalité, soit directement, octet par octet, de comparaison ou de champ de la comparaison à l'aide de la réflexion.

5voto

Dan Story Points 4836

Utilisez `` l'opérateur :

0voto

jpabluz Points 942

Ajout aux réponses existantes.

Vous pouvez toujours avoir des valeurs nulles si vous annexez un ? après le nom de struct (cela fonctionne pour chaque objet de valeur)

Le casting se fait aussi en appelant``

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X