IStructuralEquatable.Equals(Object, IEqualityComparer) Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Bir nesnenin yapısal olarak geçerli örneğe eşit olup olmadığını belirler.
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
Parametreler
- other
- Object
Geçerli örnekle karşılaştıracak nesne.
- comparer
- IEqualityComparer
Geçerli örneğin ve other
eşit olup olmadığını belirleyen bir nesne.
Döndürülenler
true
iki nesne eşitse; aksi takdirde , false
.
Örnekler
Varsayılan eşitlik karşılaştırıcısı, EqualityComparer<Object>.Default.Equals
iki NaN
değeri eşit olarak kabul eder. Ancak, bazı durumlarda, eşitlik değerlerinin karşılaştırmasının NaN
döndürerek false
değerlerin karşılaştırılamayacağını göstermesini isteyebilirsiniz. Aşağıdaki örnek, arabirimini uygulayan IStructuralEquatable bir NanComparer
sınıfı tanımlar. Eşitlik işlecini kullanarak iki Double veya iki Single değeri karşılaştırır. Diğer türlerdeki değerleri varsayılan eşitlik karşılaştırıcısına geçirir.
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
Aşağıdaki örnek, bileşenleri üç Double değerden oluşan iki özdeş 3 tanımlama grubu nesnesi oluşturur. İkinci bileşenin değeri şeklindedir Double.NaN. Örnek daha sonra yöntemini çağırır Tuple<T1,T2,T3>.Equals ve yöntemini üç kez çağırır IStructuralEquatable.Equals . İlk kez, özelliği tarafından döndürülen varsayılan eşitlik karşılaştırıcısını EqualityComparer<T>.Default geçirir. İkinci kez, özelliği tarafından döndürülen varsayılan eşitlik karşılaştırıcısını StructuralComparisons.StructuralEqualityComparer geçirir. Üçüncü kez özel nesneyi geçirir NanComparer
. Örnekteki çıktıda gösterildiği gibi, ilk üç yöntem çağrısı döndürürken true
dördüncü çağrı döndürür 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
Açıklamalar
yöntemi, Equals dizi ve tanımlama grubu nesnelerinin özel yapısal karşılaştırmasını destekler. Bu yöntem de ilk öğe veya bileşenden başlayarak tek tek dizi öğelerini veya tanımlama grubu bileşenlerini karşılaştırmak için nesnesinin IEqualityComparer.Equals yöntemini çağırırcomparer
. Tek tek end çağrısı IEqualityComparer.Equals yapılır ve IStructuralEquatable.Equals yöntem, bir yöntem çağrısı döndürdüğünde false
veya tüm dizi öğeleri veya tanımlama grubu bileşenleri karşılaştırıldıktan sonra bir değer döndürür.