IEquatable<T>.Equals(T) Metode

Definisi

Menunjukkan apakah objek saat ini sama dengan objek lain dengan jenis yang sama.

public:
 bool Equals(T other);
public bool Equals(T other);
public bool Equals(T? other);
abstract member Equals : 'T -> bool
Public Function Equals (other As T) As Boolean

Parameter

other
T

Objek untuk dibandingkan dengan objek ini.

Mengembalikan

true jika objek saat ini sama dengan other parameter; jika tidak, false.

Contoh

Contoh berikut menunjukkan implementasi Person parsial IEquatable<T> kelas yang mengimplementasikan dan memiliki dua properti, LastName dan NationalId. NationalId dianggap sebagai pengidentifikasi unik, oleh karena itu Equals metode mengembalikan True jika NationalId properti dari dua Person objek identik; jika tidak, metode mengembalikan False. (Perhatikan bahwa contoh F# tidak menangani null nilai untuk Person instans.)

public class Person : IEquatable<Person>
{
    public Person(string lastName, string ssn)
    {
        LastName = lastName;
        NationalId = ssn;
    }

    public string LastName { get; }

    public string NationalId { get; }

    public bool Equals(Person? other) => other is not null && other.NationalId == NationalId;

    public override bool Equals(object? obj) => Equals(obj as Person);

    public override int GetHashCode() => NationalId.GetHashCode();

    public static bool operator ==(Person person1, Person person2)
    {
        if (person1 is null)
        {
            return person2 is null;
        }

        return person1.Equals(person2);
    }

    public static bool operator !=(Person person1, Person person2)
    {
        if (person1 is null)
        {
            return person2 is not null;
        }

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

type Person(lastName: string, nationalId: string) =
    member this.LastName = lastName
    member this.NationalId = nationalId

    interface IEquatable<Person> with
        member this.Equals(other: Person) =
            other.NationalId = this.NationalId

    override this.Equals(obj: obj) =
        match obj with
        | :? Person as person -> (this :> IEquatable<Person>).Equals(person)
        | _ -> false

    override this.GetHashCode() =
        this.NationalId.GetHashCode()

    static member (==) (person1: Person, person2: Person) =
        person1.Equals(person2)

    static member (!=) (person1: Person, person2: Person) =
        not (person1.Equals(person2))
Public Class Person
    Implements IEquatable(Of Person)

    Public Sub New(lastName As String, nationalId As String)
        Me.LastName = lastName
        Me.NationalId = nationalId
    End Sub

    Public ReadOnly Property LastName As String
    Public ReadOnly Property NationalId As String

    Public Overloads Function Equals(other As Person) As Boolean Implements IEquatable(Of Person).Equals
        Return other IsNot Nothing AndAlso other.NationalId = Me.NationalId
    End Function

    Public Overrides Function Equals(obj As Object) As Boolean
        Return Equals(TryCast(obj, Person))
    End Function

    Public Overrides Function GetHashCode() As Integer
        Return NationalId.GetHashCode()
    End Function

    Public Shared Operator =(person1 As Person, person2 As Person) As Boolean
        If person1 Is Nothing Then
            Return person2 Is Nothing
        End If
        Return person1.Equals(person2)
    End Operator

    Public Shared Operator <>(person1 As Person, person2 As Person) As Boolean
        If person1 Is Nothing Then
            Return person2 IsNot Nothing
        End If
        Return Not person1.Equals(person2)
    End Operator
End Class

Person Ketika disimpan dalam List<T>, Contains menggunakan implementasinya Equals untuk mencari kecocokan.

List<Person> applicants = new List<Person>()
{
    new Person("Jones", "099-29-4999"),
    new Person("Jones", "199-29-3999"),
    new Person("Jones", "299-49-6999")
};

// Create a Person object for the final candidate.
Person candidate = new Person("Jones", "199-29-3999");
bool contains = applicants.Contains(candidate);
Console.WriteLine($"{candidate.LastName} ({candidate.NationalId}) is on record: {contains}");
// The example prints the following output:
// Jones (199-29-3999) is on record: True
let applicants = 
    [ Person("Jones", "099-29-4999")
      Person("Jones", "199-29-3999")
      Person("Jones", "299-49-6999") ]

let candidate = Person("Jones", "199-29-3999")
let contains = List.contains candidate applicants
printfn "%s (%s) is on record: %b" candidate.LastName candidate.NationalId contains
// The example prints the following output:
// Jones (199-29-3999) is on record: true
Dim applicants As New List(Of Person)
applicants.Add(New Person("Jones", "099-29-4999"))
applicants.Add(New Person("Jones", "199-29-3999"))
applicants.Add(New Person("Jones", "299-49-6999"))

' Create a Person object for the final candidate.
Dim candidate As New Person("Jones", "199-29-3999")
Dim contains As Boolean = applicants.Contains(candidate)
Console.WriteLine($"{candidate.LastName} ({candidate.NationalId}) is on record: {contains}")
' The example prints the following output:
' Jones (199-29-3999) Is on record True

Keterangan

Implementasi Equals metode ini dimaksudkan untuk melakukan pengujian untuk kesetaraan dengan objek jenis Tlain , jenis yang sama dengan objek saat ini. Metode Equals(T) ini dipanggil dalam keadaan berikut:

Dengan kata lain, untuk menangani kemungkinan bahwa objek kelas akan disimpan dalam array atau objek pengumpulan generik, ada baiknya untuk diimplementasikan IEquatable<T> sehingga objek dapat dengan mudah diidentifikasi dan dimanipulasi.

Saat menerapkan Equals metode , tentukan kesetaraan dengan tepat untuk jenis yang ditentukan oleh argumen jenis generik. Misalnya, jika argumen jenis adalah Int32, tentukan kesetaraan dengan tepat untuk perbandingan dua bilangan bulat bertanda tangan 32-bit.

Catatan Bagi Implementer

Jika Anda menerapkan Equals(T), Anda juga harus mengambil alih implementasi Equals(Object) kelas dasar dan GetHashCode() sehingga perilakunya konsisten dengan metode .Equals(T) Jika Anda mengambil alih Equals(Object), implementasi yang ditimpa juga dipanggil dalam panggilan ke metode statis Equals(System.Object, System.Object) di kelas Anda. Selain itu, Anda harus membebani op_Equality operator dan op_Inequality secara berlebihan. Ini memastikan bahwa semua pengujian untuk kesetaraan mengembalikan hasil yang konsisten, yang diilustrasikan contoh.

Berlaku untuk