IStructuralEquatable IStructuralEquatable IStructuralEquatable IStructuralEquatable Interface

정의

개체의 구조가 같은지 비교할 수 있는 메서드를 정의합니다.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 인터페이스를 구현하는 IStructuralEquatable 클래스를 정의합니다.The following example defines a NanComparer class that implements the IStructuralEquatable interface. 두 비교 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 값입니다.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 클래스 (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#) 또는 변환 (Visual Basic)의 배열 또는 튜플의 현재 인스턴스에 의해를 IStructuralEquatable 인터페이스 값 제공 하 고 프로그램 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) Equals(Object, IEqualityComparer) Equals(Object, IEqualityComparer) Equals(Object, IEqualityComparer)

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

GetHashCode(IEqualityComparer) GetHashCode(IEqualityComparer) GetHashCode(IEqualityComparer) GetHashCode(IEqualityComparer)

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

적용 대상

추가 정보