IStructuralEquatable 인터페이스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
개체의 구조가 같은지 비교할 수 있는 메서드를 정의합니다.
public interface class IStructuralEquatable
public interface IStructuralEquatable
type IStructuralEquatable = interface
Public Interface IStructuralEquatable
- 파생
예제
기본 같음 비교자 인 EqualityComparer<Object>.Default.Equals
는 두 NaN
값을 같음으로 간주합니다. 그러나 경우에 따라 값을 비교할 수 없음을 나타내는 을 반환false
하기 위해 같음 값의 NaN
비교를 원할 수 있습니다. 다음 예제에서는 NanComparer
인터페이스를 구현하는 IEqualityComparer 클래스를 정의합니다. 세 번째 예제에서는 튜플이 구현하는 인터페이스의 메서드에 Equals(Object, IEqualityComparer)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
설명
구조적 같음은 두 개체의 값이 같기 때문에 같음을 의미합니다. 동일한 물리적 개체를 참조하기 때문에 두 개체 참조가 같음을 나타내는 참조 같음과 다릅니다. IStructuralEquatable 인터페이스를 사용하면 사용자 지정된 비교를 구현하여 컬렉션 개체의 구조적 같음을 확인할 수 있습니다. 즉, 구조적 같음의 고유한 정의를 만들고 이 정의를 인터페이스를 허용하는 컬렉션 형식과 함께 사용되도록 지정할 수 있습니다 IStructuralEquatable . 인터페이스에는 지정된 IEqualityComparer 구현GetHashCode을 사용하여 같음을 테스트하는 과 같은 개체에 대해 동일한 해시 코드를 반환하는 의 두 멤버Equals가 있습니다.
참고
인터페이스는 IStructuralEquatable 구조적 같음에 대한 사용자 지정 비교만 지원합니다. 인터페이스는 IStructuralComparable 정렬 및 순서 지정을 위한 사용자 지정 구조 비교를 지원합니다.
.NET Framework는 및 StructuralComparisons.StructuralEqualityComparer 속성에서 EqualityComparer<T>.Default 반환되는 기본 같음 비교자도 제공합니다. 자세한 내용은 예제를 참조하세요.
제네릭 튜플 클래스(Tuple<T1>, Tuple<T1,T2>, Tuple<T1,T2,T3>등) 및 클래스는 Array 인터페이스의 명시적 구현을 IStructuralEquatable 제공합니다. 배열 또는 튜플 IStructuralEquatable 의 현재 인스턴스를 C#으로 캐스팅하거나(Visual Basic에서) 인터페이스 값으로 변환하고 구현을 IEqualityComparer 메서드에 대한 인수 Equals 로 제공하여 배열 또는 컬렉션에 대한 사용자 지정 같음 비교를 정의할 수 있습니다.
메서드
Equals(Object, IEqualityComparer) |
개체가 현재 인스턴스와 구조적으로 같은지 여부를 확인합니다. |
GetHashCode(IEqualityComparer) |
현재 인스턴스의 해시 코드를 반환합니다. |
적용 대상
추가 정보
.NET