Lire en anglais

Partager via


IEquatable<T>.Equals(T) Méthode

Définition

Indique si l'objet actuel est égal à un autre objet du même type.

public bool Equals (T other);
public bool Equals (T? other);

Paramètres

other
T

Objet à comparer à cet objet.

Retours

true si l'objet actuel est égal au paramètre other ; sinon, false.

Exemples

L’exemple suivant montre l’implémentation partielle d’une Person classe qui implémente IEquatable<T> et a deux propriétés, LastName et SSN. La Equals méthode retourne True si la SSN propriété de deux Person objets est identique ; sinon, elle retourne False.

using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;

public class Person : IEquatable<Person>
{
   private string uniqueSsn;
   private string lName;

   public Person(string lastName, string ssn)
   {
      if (Regex.IsMatch(ssn, @"\d{9}"))
        uniqueSsn = $"{ssn.Substring(0, 3)}-{ssn.Substring(3, 2)}-{ssn.Substring(5, 4)}";
      else if (Regex.IsMatch(ssn, @"\d{3}-\d{2}-\d{4}"))
         uniqueSsn = ssn;
      else
         throw new FormatException("The social security number has an invalid format.");

      this.LastName = lastName;
   }

   public string SSN
   {
      get { return this.uniqueSsn; }
   }

   public string LastName
   {
      get { return this.lName; }
      set {
         if (String.IsNullOrEmpty(value))
            throw new ArgumentException("The last name cannot be null or empty.");
         else
            this.lName = value;
      }
   }

   public bool Equals(Person other)
   {
      if (other == null)
         return false;

      if (this.uniqueSsn == other.uniqueSsn)
         return true;
      else
         return false;
   }

   public override bool Equals(Object obj)
   {
      if (obj == null)
         return false;

      Person personObj = obj as Person;
      if (personObj == null)
         return false;
      else
         return Equals(personObj);
   }

   public override int GetHashCode()
   {
      return this.SSN.GetHashCode();
   }

   public static bool operator == (Person person1, Person person2)
   {
      if (((object)person1) == null || ((object)person2) == null)
         return Object.Equals(person1, person2);

      return person1.Equals(person2);
   }

   public static bool operator != (Person person1, Person person2)
   {
      if (((object)person1) == null || ((object)person2) == null)
         return ! Object.Equals(person1, person2);

      return ! (person1.Equals(person2));
   }
}

Person Les objets peuvent ensuite être stockés dans un List<T> objet et peuvent être identifiés par la Contains méthode , comme le montre l’exemple suivant.

public class TestIEquatable
{
   public static void Main()
   {
      // Create a Person object for each job applicant.
      Person applicant1 = new Person("Jones", "099-29-4999");
      Person applicant2 = new Person("Jones", "199-29-3999");
      Person applicant3 = new Person("Jones", "299-49-6999");

      // Add applicants to a List object.
      List<Person> applicants = new List<Person>();
      applicants.Add(applicant1);
      applicants.Add(applicant2);
      applicants.Add(applicant3);

       // Create a Person object for the final candidate.
       Person candidate = new Person("Jones", "199-29-3999");
       if (applicants.Contains(candidate))
          Console.WriteLine("Found {0} (SSN {1}).",
                             candidate.LastName, candidate.SSN);
      else
         Console.WriteLine("Applicant {0} not found.", candidate.SSN);

      // Call the shared inherited Equals(Object, Object) method.
      // It will in turn call the IEquatable(Of T).Equals implementation.
      Console.WriteLine("{0}({1}) already on file: {2}.",
                        applicant2.LastName,
                        applicant2.SSN,
                        Person.Equals(applicant2, candidate));
   }
}
// The example displays the following output:
//       Found Jones (SSN 199-29-3999).
//       Jones(199-29-3999) already on file: True.

Remarques

L’implémentation de la Equals méthode est destinée à effectuer un test d’égalité avec un autre objet de type T, le même type que l’objet actuel. La Equals(T) méthode est appelée dans les circonstances suivantes :

En d’autres termes, pour gérer la possibilité que des objets d’une classe soient stockés dans un tableau ou un objet de collection générique, il est judicieux d’implémenter IEquatable<T> afin que l’objet puisse être facilement identifié et manipulé.

Lors de l’implémentation de la Equals méthode, définissez l’égalité de manière appropriée pour le type spécifié par l’argument de type générique. Par exemple, si l’argument type est Int32, définissez l’égalité de manière appropriée pour la comparaison de deux entiers signés 32 bits.

Notes pour les responsables de l’implémentation

Si vous implémentez Equals(T), vous devez également remplacer les implémentations de classe de base de Equals(Object) et GetHashCode() afin que leur comportement soit cohérent avec celui de la Equals(T) méthode . Si vous remplacez Equals(Object), votre implémentation remplacée est également appelée dans les appels à la méthode statique Equals(System.Object, System.Object) sur votre classe. En outre, vous devez surcharger les op_Equality opérateurs et .op_Inequality Cela garantit que tous les tests d’égalité retournent des résultats cohérents, ce que l’exemple illustre.

S’applique à

Produit Versions
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0