Aracılığıyla paylaş


IStructuralEquatable.Equals(Object, IEqualityComparer) Yöntem

Tanım

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.Equalsiki 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 falsedeğ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 truedö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.

Şunlara uygulanır

Ayrıca bkz.