IStructuralEquatable.Equals(Object, IEqualityComparer) Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Menentukan apakah objek secara struktural sama dengan instans saat ini.
public:
bool Equals(System::Object ^ other, System::Collections::IEqualityComparer ^ comparer);
public bool Equals (object other, System.Collections.IEqualityComparer comparer);
public bool Equals (object? other, System.Collections.IEqualityComparer comparer);
abstract member Equals : obj * System.Collections.IEqualityComparer -> bool
Public Function Equals (other As Object, comparer As IEqualityComparer) As Boolean
Parameter
- other
- Object
Objek untuk dibandingkan dengan instans saat ini.
- comparer
- IEqualityComparer
Objek yang menentukan apakah instans saat ini dan other
sama.
Mengembalikan
true
jika dua objek sama; jika tidak, false
.
Contoh
Perbandingan kesetaraan default, EqualityComparer<Object>.Default.Equals
, menganggap dua NaN
nilai sama. Namun, dalam beberapa kasus, Anda mungkin ingin perbandingan nilai untuk kesetaraan NaN
kembali false
, yang menunjukkan bahwa nilai tidak dapat dibandingkan. Contoh berikut mendefinisikan NanComparer
kelas yang mengimplementasikan IStructuralEquatable antarmuka. Ini membandingkan dua Double atau dua Single nilai dengan menggunakan operator kesetaraan. Ini meneruskan nilai dari jenis lain ke perbandingan kesetaraan default.
using System;
using System.Collections;
using System.Collections.Generic;
public class NanComparer : IEqualityComparer
{
public new bool Equals(object x, object y)
{
if (x is float)
return (float) x == (float) y;
else if (x is double)
return (double) x == (double) y;
else
return EqualityComparer<object>.Default.Equals(x, y);
}
public int GetHashCode(object obj)
{
return EqualityComparer<object>.Default.GetHashCode(obj);
}
}
Imports System.Collections
Imports System.Collections.Generic
Public Class NanComparer : Implements IEqualityComparer
Public Overloads Function Equals(x As Object, y As Object) As Boolean _
Implements IEqualityComparer.Equals
If TypeOf x Is Single Then
Return CSng(x) = CSng(y)
ElseIf TypeOf x Is Double Then
Return CDbl(x) = CDbl(y)
Else
Return EqualityComparer(Of Object).Default.Equals(x, y)
End If
End Function
Public Overloads Function GetHashCode(obj As Object) As Integer _
Implements IEqualityComparer.GetHashCode
Return EqualityComparer(Of Object).Default.GetHashCode(obj)
End Function
End Class
Contoh berikut membuat dua objek 3 tuple yang identik yang komponennya terdiri dari tiga Double nilai. Nilai komponen kedua adalah Double.NaN. Contohnya kemudian memanggil Tuple<T1,T2,T3>.Equals metode , dan memanggil IStructuralEquatable.Equals metode tiga kali. Pertama kali, ia melewati perbandingan kesetaraan default yang dikembalikan oleh EqualityComparer<T>.Default properti . Kedua kalinya, ia melewati perbandingan kesetaraan default yang dikembalikan oleh StructuralComparisons.StructuralEqualityComparer properti . Ketiga kalinya, melewati objek kustom NanComparer
. Seperti yang ditunjukkan oleh output dari contoh, tiga panggilan metode pertama mengembalikan true
, sedangkan panggilan keempat mengembalikan false
.
public class Example
{
public static void Main()
{
var t1 = Tuple.Create(12.3, Double.NaN, 16.4);
var t2 = Tuple.Create(12.3, Double.NaN, 16.4);
// Call default Equals method.
Console.WriteLine(t1.Equals(t2));
IStructuralEquatable equ = t1;
// Call IStructuralEquatable.Equals using default comparer.
Console.WriteLine(equ.Equals(t2, EqualityComparer<object>.Default));
// Call IStructuralEquatable.Equals using
// StructuralComparisons.StructuralEqualityComparer.
Console.WriteLine(equ.Equals(t2,
StructuralComparisons.StructuralEqualityComparer));
// Call IStructuralEquatable.Equals using custom comparer.
Console.WriteLine(equ.Equals(t2, new NanComparer()));
}
}
// The example displays the following output:
// True
// True
// True
// False
Module Example
Public Sub Main()
Dim t1 = Tuple.Create(12.3, Double.NaN, 16.4)
Dim t2 = Tuple.Create(12.3, Double.NaN, 16.4)
' Call default Equals method.
Console.WriteLine(t1.Equals(t2))
Dim equ As IStructuralEquatable = t1
' Call IStructuralEquatable.Equals using default comparer.
Console.WriteLine(equ.Equals(t2, EqualityComparer(Of Object).Default))
' Call IStructuralEquatable.Equals using
' StructuralComparisons.StructuralEqualityComparer.
Console.WriteLine(equ.Equals(t2,
StructuralComparisons.StructuralEqualityComparer))
' Call IStructuralEquatable.Equals using custom comparer.
Console.WriteLine(equ.Equals(t2, New NanComparer))
End Sub
End Module
' The example displays the following output:
' True
' True
' True
' False
Keterangan
Metode ini Equals mendukung perbandingan struktural kustom dari objek array dan tuple. Metode ini pada gilirannya comparer
memanggil metode objek IEqualityComparer.Equals untuk membandingkan elemen array individual atau komponen tuple, dimulai dengan elemen atau komponen pertama. Panggilan individual ke IEqualityComparer.Equals ujung dan IStructuralEquatable.Equals metode mengembalikan nilai baik ketika panggilan metode kembali false
atau setelah semua elemen array atau komponen tuple telah dibandingkan.