IStructuralEquatable.Equals(Object, IEqualityComparer) Methode

Definitie

Bepaalt of een object structureel gelijk is aan het huidige exemplaar.

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

Parameters

other
Object

Het object dat moet worden vergeleken met het huidige exemplaar.

comparer
IEqualityComparer

Een object dat bepaalt of het huidige exemplaar gelijk is.other

Retouren

true als de twee objecten gelijk zijn; anders, false.

Voorbeelden

De standaard gelijkheidsgelijker, EqualityComparer<Object>.Default.Equalsbeschouwt twee NaN waarden als gelijk. In sommige gevallen wilt u echter mogelijk dat de vergelijking van NaN waarden voor gelijkheid wordt geretourneerd false, wat aangeeft dat de waarden niet kunnen worden vergeleken. In het volgende voorbeeld wordt een NanComparer klasse gedefinieerd waarmee de IStructuralEquatable interface wordt geïmplementeerd. Er worden twee Double of twee Single waarden vergeleken met behulp van de gelijkheidsoperator. Hiermee worden waarden van elk ander type doorgegeven aan de standaard gelijkheidsgelijker.

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

In het volgende voorbeeld worden twee identieke 3 tuple-objecten gemaakt waarvan de onderdelen uit drie Double waarden bestaan. De waarde van het tweede onderdeel is Double.NaN. In het voorbeeld wordt de Tuple<T1,T2,T3>.Equals methode vervolgens drie keer aangeroepen en wordt de IStructuralEquatable.Equals methode drie keer aangeroepen. De eerste keer wordt de standaard gelijkheidsgelijker doorgegeven die door de EqualityComparer<T>.Default eigenschap wordt geretourneerd. De tweede keer wordt de standaard gelijkheidsgelijker doorgegeven die door de StructuralComparisons.StructuralEqualityComparer eigenschap wordt geretourneerd. De derde keer wordt het aangepaste NanComparer object doorgegeven. Zoals in de uitvoer van het voorbeeld wordt weergegeven, worden de eerste drie methode-aanroepen geretourneerd true, terwijl de vierde aanroep retourneert 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

Opmerkingen

De Equals methode ondersteunt aangepaste structurele vergelijking van matrix- en tuple-objecten. Deze methode roept op zijn beurt de methode van IEqualityComparer.Equals het comparer object aan om afzonderlijke matrixelementen of tuple-onderdelen te vergelijken, te beginnen met het eerste element of onderdeel. De afzonderlijke aanroepen om te IEqualityComparer.Equals beëindigen en de IStructuralEquatable.Equals methode retourneert een waarde wanneer een methodeaanroep retourneert false of nadat alle matrixelementen of tuple-onderdelen zijn vergeleken.

Van toepassing op

Zie ook