다음을 통해 공유


IStructuralEquatable.Equals(Object, IEqualityComparer) 메서드

정의

개체가 현재 인스턴스와 구조적으로 같은지 여부를 확인합니다.

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

매개 변수

other
Object

현재 인스턴스와 비교할 개체입니다.

comparer
IEqualityComparer

현재 인스턴스와 other가 같은지 여부를 확인하는 개체입니다.

반환

두 개체가 같으면 true이고, 그러지 않으면 false입니다.

예제

기본 같음 비교자 인 EqualityComparer<Object>.Default.Equals는 두 NaN 값을 같음으로 간주합니다. 그러나 경우에 따라 값을 비교할 수 없음을 나타내는 을 반환false하기 위해 같음 값의 NaN 비교를 원할 수 있습니다. 다음 예제에서는 NanComparer 인터페이스를 구현하는 IStructuralEquatable 클래스를 정의합니다. 같음 연산자를 사용하여 두 Double 개 또는 두 개의 Single 값을 비교합니다. 다른 형식의 값을 기본 같음 비교자에 전달합니다.

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

다음 예제에서는 구성 요소가 세 개의 값으로 구성된 Double 두 개의 동일한 3 튜플 개체를 만듭니다. 두 번째 구성 요소의 값은 입니다 Double.NaN. 그런 다음, 메서드를 Tuple<T1,T2,T3>.Equals 호출하고 메서드를 세 번 호출합니다 IStructuralEquatable.Equals . 처음으로 속성에서 반환 EqualityComparer<T>.Default 하는 기본 같음 비교자를 전달합니다. 두 번째로 속성에서 반환 StructuralComparisons.StructuralEqualityComparer 하는 기본 같음 비교자를 전달합니다. 세 번째로 사용자 지정 NanComparer 개체를 전달합니다. 예제의 출력에서 보여 주듯이 처음 세 메서드 호출은 를 반환 true하는 반면 네 번째 호출은 를 반환합니다 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

설명

메서드는 Equals 배열 및 튜플 개체의 사용자 지정 구조 비교를 지원합니다. 이 메서드는 개체의 IEqualityComparer.Equals 메서드를 comparer 호출하여 첫 번째 요소 또는 구성 요소부터 시작하여 개별 배열 요소 또는 튜플 구성 요소를 비교합니다. 에 대한 IEqualityComparer.Equals 개별 호출과 메서드는 메서드 호출이 IStructuralEquatable.Equals 반환될 때 또는 모든 배열 요소 또는 튜플 구성 요소를 비교한 후 값을 반환 false 합니다.

적용 대상

추가 정보