IStructuralEquatable.Equals(Object, IEqualityComparer) Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Avgör om ett objekt är strukturellt lika med den aktuella instansen.
public:
bool Equals(System::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
Parametrar
- other
- Object
Det objekt som ska jämföras med den aktuella instansen.
- comparer
- IEqualityComparer
Ett objekt som avgör om den aktuella instansen och other är lika med.
Returer
trueom de två objekten är lika; annars . false
Exempel
Standardjämförlikningsjämföraren, EqualityComparer<Object>.Default.Equals, anser att två NaN värden är lika med. Men i vissa fall kanske du vill att jämförelsen av NaN värden för likhet ska returnera false, vilket indikerar att värdena inte kan jämföras. I följande exempel definieras en NanComparer klass som implementerar IStructuralEquatable gränssnittet. Den jämför två Double eller två Single värden med hjälp av likhetsoperatorn. Den skickar värden av någon annan typ till standardjämförlikningsjämföraren.
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
I följande exempel skapas två identiska 3-tuppeln-objekt vars komponenter består av tre Double värden. Värdet för den andra komponenten är Double.NaN. Exemplet anropar Tuple<T1,T2,T3>.Equals sedan metoden och anropar IStructuralEquatable.Equals metoden tre gånger. Första gången skickas standardjämlikhetsjämförlikningsjämföraren som returneras av EqualityComparer<T>.Default egenskapen. Den andra gången skickas standardjämlikhetsjämföraren som returneras av StructuralComparisons.StructuralEqualityComparer egenskapen. Den tredje gången skickas det anpassade NanComparer objektet. Som utdata från exemplet visar returnerar truede tre första metodanropen , medan det fjärde anropet returnerar 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
Kommentarer
Metoden Equals stöder anpassad strukturell jämförelse av matris- och tuppelns objekt. Den här metoden anropar comparer i sin tur objektets IEqualityComparer.Equals metod för att jämföra enskilda matriselement eller tuppelkomponenter, med början med det första elementet eller komponenten. De enskilda anropen IStructuralEquatable.Equals till slutet och metoden returnerar ett värde antingen när ett metodanrop returnerar false eller efter att IEqualityComparer.Equals alla matriselement eller tuppelns komponenter har jämförts.