İngilizce dilinde oku

Aracılığıyla paylaş


IEquatable<T>.Equals(T) Yöntem

Tanım

Geçerli nesnenin aynı türdeki başka bir nesneye eşit olup olmadığını gösterir.

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

Parametreler

other
T

Bu nesneyle karşılaştıracak bir nesne.

Döndürülenler

true geçerli nesne parametresine other eşitse; değilse, false.

Örnekler

Aşağıdaki örnek, uygulayan ve iki özelliği LastName olan IEquatable<T> bir Person sınıfın kısmi uygulamasını gösterir: ve SSN. yöntemi, Equals iki nesnenin SSN özelliği aynıysa döndürürTrue; aksi takdirde döndürürFalsePerson.

C#
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 nesneleri daha sonra bir List<T> nesnede depolanabilir ve aşağıdaki örnekte gösterildiği gibi yöntemiyle Contains tanımlanabilir.

C#
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.

Açıklamalar

yönteminin Equals uygulanması, geçerli nesneyle aynı türdeki Tbaşka bir nesneyle eşitlik testi gerçekleştirmeye yöneliktir. yöntemi Equals(T) aşağıdaki durumlarda çağrılır:

Başka bir deyişle, bir sınıfın nesnelerinin bir dizide veya genel koleksiyon nesnesinde depolanma olasılığını işlemek için, nesnenin kolayca tanımlanabilmesi ve işlenebilmesi için uygulanması IEquatable<T> iyi bir fikirdir.

yöntemini uygularken Equals , genel tür bağımsız değişkeni tarafından belirtilen tür için eşitliği uygun şekilde tanımlayın. Örneğin, tür bağımsız değişkeni ise Int32, iki 32 bit işaretli tamsayının karşılaştırması için eşitliği uygun şekilde tanımlayın.

Uygulayanlara Notlar

uygularsanız Equals(T), ve'nin temel sınıf uygulamalarını Equals(Object)GetHashCode() da geçersiz kılmanız gerekir, böylece davranışları yönteminkiyle Equals(T) tutarlı olur. geçersiz kılarsanız Equals(Object)geçersiz kılınan uygulamanız sınıfınızdaki statik Equals(System.Object, System.Object) yönteme yapılan çağrılarda da çağrılır. Ayrıca ve op_Inequality işleçlerini op_Equality aşırı yüklemelisiniz. Bu, eşitlik için tüm testlerin tutarlı sonuçlar döndürmesini sağlar ve bu örnekte gösterilmiştir.

Şunlara uygulanır

Ürün Sürümler
.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