IStructuralEquatable 인터페이스

정의

개체의 구조가 같은지 비교할 수 있는 메서드를 정의합니다.Defines methods to support the comparison of objects for structural equality.

public interface class IStructuralEquatable
public interface IStructuralEquatable
type IStructuralEquatable = interface
Public Interface IStructuralEquatable
파생

예제

기본 같음 비교자 인 EqualityComparer<Object>.Default.Equals는 두 개의 NaN 값이 동일한 것으로 간주 합니다.The default equality comparer, EqualityComparer<Object>.Default.Equals, considers two NaN values to be equal. 그러나 경우에 따라 NaN 값이 같은지 비교 하 여 값을 비교할 수 없음을 나타내는 false를 반환할 수 있습니다.However, in some cases, you may want the comparison of NaN values for equality to return false, which indicates that the values cannot be compared. 다음 예제에서는 NanComparer 인터페이스를 구현하는 IEqualityComparer 클래스를 정의합니다.The following example defines a NanComparer class that implements the IEqualityComparer interface. 세 번째 예제에서는 튜플을 구현 하는 IStructuralEquatable 인터페이스의 Equals(Object, IEqualityComparer) 메서드에 대 한 인수로 사용 됩니다.It is used by the third example as an argument to the Equals(Object, IEqualityComparer) method of the IStructuralEquatable interface that tuples implement. 같음 연산자를 사용 하 여 두 개의 Double 또는 두 Single 값을 비교 합니다.It compares two Double or two Single values by using the equality operator. 기본 같음 비교자를 다른 형식의 값을 전달 합니다.It passes values of any other type to the default equality comparer.

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

다음 예에서는 구성 요소가 3 개의 Double 값으로 구성 된 두 개의 동일한 3 튜플 개체를 만듭니다.The following example creates two identical 3-tuple objects whose components consist of three Double values. 두 번째 구성 요소의 값이 Double.NaN됩니다.The value of the second component is Double.NaN. 그런 다음이 예제에서는 Tuple<T1,T2,T3>.Equals 메서드를 호출 하 고 IStructuralEquatable.Equals 메서드를 세 번 호출 합니다.The example then calls the Tuple<T1,T2,T3>.Equals method, and it calls the IStructuralEquatable.Equals method three times. 처음으로 EqualityComparer<T>.Default 속성에서 반환 되는 기본 같음 비교자를 전달 합니다.The first time, it passes the default equality comparer that is returned by the EqualityComparer<T>.Default property. 두 번째로 StructuralComparisons.StructuralEqualityComparer 속성에서 반환 되는 기본 같음 비교자를 전달 합니다.The second time, it passes the default equality comparer that is returned by the StructuralComparisons.StructuralEqualityComparer property. 세 번째로 사용자 지정 NanComparer 개체를 전달 합니다.The third time, it passes the custom NanComparer object. 예제의 출력에 표시 된 것 처럼 처음 세 개의 메서드 호출은 true을 반환 하는 반면, 네 번째 호출은 false를 반환 합니다.As the output from the example shows, the first three method calls return true, whereas the fourth call returns 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

설명

구조적 같음 값이 같으면 있기 때문에 두 개체가 같은지를 의미 합니다.Structural equality means that two objects are equal because they have equal values. 동일한 실제 개체를 참조 하기 때문에 두 개체 참조가 같은지를 나타내는 참조 같음에서 달라 집니다.It differs from reference equality, which indicates that two object references are equal because they reference the same physical object. IStructuralEquatable 인터페이스를 사용 하면 컬렉션 개체의 구조적 같음을 확인 하는 사용자 지정 비교를 구현할 수 있습니다.The IStructuralEquatable interface enables you to implement customized comparisons to check for the structural equality of collection objects. 즉, 고유한 구조적 같음 정의를 만들고이 정의가 IStructuralEquatable 인터페이스를 허용 하는 컬렉션 형식과 함께 사용 되도록 지정할 수 있습니다.That is, you can create your own definition of structural equality and specify that this definition be used with a collection type that accepts the IStructuralEquatable interface. 인터페이스에는 두 개의 멤버가 있습니다. Equals는 지정 된 IEqualityComparer 구현을 사용 하 여 같은지 테스트 하 고 동일한 개체에 대해 동일한 해시 코드를 반환 하는 GetHashCode입니다.The interface has two members: Equals, which tests for equality by using a specified IEqualityComparer implementation, and GetHashCode, which returns identical hash codes for objects that are equal.

참고

IStructuralEquatable 인터페이스는 구조적 같음에 대 한 사용자 지정 비교만 지원 합니다.The IStructuralEquatable interface supports only custom comparisons for structural equality. IStructuralComparable 인터페이스는 정렬 및 정렬에 대 한 사용자 지정 구조적 비교를 지원 합니다.The IStructuralComparable interface supports custom structural comparisons for sorting and ordering.

.NET Framework는 EqualityComparer<T>.DefaultStructuralComparisons.StructuralEqualityComparer 속성에 의해 반환 되는 기본 같음 비교자도 제공 합니다.The .NET Framework also provides default equality comparers, which are returned by the EqualityComparer<T>.Default and StructuralComparisons.StructuralEqualityComparer properties. 자세한 내용은 예제를 참조 하세요.For more information, see the example.

제네릭 튜플 클래스 (Tuple<T1>, Tuple<T1,T2>, Tuple<T1,T2,T3>등) 및 Array 클래스는 IStructuralEquatable 인터페이스의 명시적 구현을 제공 합니다.The generic tuple classes (Tuple<T1>, Tuple<T1,T2>, Tuple<T1,T2,T3>, and so on) and the Array class provide explicit implementations of the IStructuralEquatable interface. 배열 또는 튜플의 현재 C#인스턴스를 IStructuralEquatable 인터페이스 값으로 캐스팅 (in) 또는 변환 (Visual Basic) 하거나 IEqualityComparer 구현을 Equals 메서드에 대 한 인수로 제공 하 여 배열 또는 컬렉션에 대 한 사용자 지정 같음 비교를 정의할 수 있습니다.By casting (in C#) or converting (in Visual Basic) the current instance of an array or tuple to an IStructuralEquatable interface value and providing your IEqualityComparer implementation as an argument to the Equals method, you can define a custom equality comparison for the array or collection.

메서드

Equals(Object, IEqualityComparer)

개체가 현재 인스턴스와 구조적으로 같은지 여부를 결정 합니다.Determines whether an object is structurally equal to the current instance.

GetHashCode(IEqualityComparer)

현재 인스턴스의 해시 코드를 반환합니다.Returns a hash code for the current instance.

적용 대상

추가 정보