Auf Englisch lesen

Freigeben über


IEquatable<T>.Equals(T) Methode

Definition

Gibt an, ob das aktuelle Objekt gleich einem anderen Objekt des gleichen Typs ist.

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

Parameter

other
T

Ein Objekt, das mit diesem Objekt verglichen werden soll.

Gibt zurück

true, wenn das aktuelle Objekt gleich dem other-Parameter ist, andernfalls false.

Beispiele

Das folgende Beispiel zeigt die partielle Implementierung einer Person Klasse, die implementiert IEquatable<T> und über zwei Eigenschaften verfügt, LastName und SSN. Die Equals -Methode gibt zurück True , wenn die SSN -Eigenschaft von zwei Person -Objekten identisch ist, andernfalls wird zurückgegeben 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 -Objekte können dann in einem List<T> -Objekt gespeichert und durch die Contains -Methode identifiziert werden, wie im folgenden Beispiel gezeigt.

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.

Hinweise

Die Implementierung der Equals -Methode soll einen Test auf Gleichheit mit einem anderen Objekt vom Typ Tdurchführen, demselben Typ wie das aktuelle Objekt. Die Equals(T) -Methode wird unter folgenden Umständen aufgerufen:

Anders ausgedrückt: Um die Möglichkeit zu behandeln, dass Objekte einer Klasse in einem Array oder einem generischen Auflistungsobjekt gespeichert werden, empfiehlt es sich, zu implementieren IEquatable<T> , damit das Objekt leicht identifiziert und bearbeitet werden kann.

Wenn Sie die Equals -Methode implementieren, definieren Sie die Gleichheit entsprechend für den Typ, der durch das generische Typargument angegeben wird. Wenn das Typargument beispielsweise lautet Int32, definieren Sie die Gleichheit entsprechend für den Vergleich von zwei 32-Bit-Ganzzahlen mit Vorzeichen.

Hinweise für Ausführende

Wenn Sie implementieren Equals(T), sollten Sie auch die Basisklassenimplementierungen von Equals(Object) und GetHashCode() überschreiben, damit ihr Verhalten mit dem Equals(T) der -Methode konsistent ist. Wenn Sie überschreiben Equals(Object), wird Ihre überschriebene Implementierung auch in Aufrufen der statischen Equals(System.Object, System.Object) Methode für Ihre Klasse aufgerufen. Darüber hinaus sollten Sie die op_Equality Operatoren und op_Inequality überladen. Dadurch wird sichergestellt, dass alle Gleichheitstests konsistente Ergebnisse zurückgeben, was im Beispiel veranschaulicht wird.

Gilt für:

Produkt Versionen
.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, 10
.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