Tuple<T1,T2,T3,T4>.IStructuralEquatable.Equals 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
지정된 비교 메서드를 기반으로 현재 Tuple<T1,T2,T3,T4> 개체가 지정된 개체와 같은지 여부를 나타내는 값을 반환합니다.
virtual bool System.Collections.IStructuralEquatable.Equals(System::Object ^ other, System::Collections::IEqualityComparer ^ comparer) = System::Collections::IStructuralEquatable::Equals;
bool IStructuralEquatable.Equals (object other, System.Collections.IEqualityComparer comparer);
abstract member System.Collections.IStructuralEquatable.Equals : obj * System.Collections.IEqualityComparer -> bool
override this.System.Collections.IStructuralEquatable.Equals : obj * System.Collections.IEqualityComparer -> bool
Function Equals (other As Object, comparer As IEqualityComparer) As Boolean Implements IStructuralEquatable.Equals
매개 변수
- other
- Object
이 인스턴스와 비교할 개체입니다.
- comparer
- IEqualityComparer
두 개체가 같은지 여부를 평가하는 데 사용할 방법을 정의하는 개체입니다.
반환
현재 인스턴스가 지정된 개체와 같으면 true
이고, 그렇지 않으면 false
입니다.
구현
예제
다음 예제에서는 인터페이스를 Item3And4Comparer
구현하는 클래스를 IEqualityComparer 정의하고 개체가 같은지 평가하는 방식을 Tuple<T1,T2,T3,T4> 변경합니다. 메서드는 두 Tuple<T1,T2,T3,T4> 개체의 속성 값 및 Item2 전달될 Item1 때 항상 반환 true
하고 메서드를 obj.Equals
호출하여 해당 Item3 속성 값을 평가합니다. 이 메서드 호출은 true를 반환하고 메서드를 obj.Equals
호출하여 튜플의 Item4 속성 값을 평가합니다. 결과적으로 메서드는 값 및 Item4 속성에 따라 같음을 Item3 테스트합니다. 출력은 미국 도시의 이름, 1년 중 월 및 해당 월의 평균 고온 및 저온을 기록하는 개체의 데이터 집합 Tuple<T1,T2,T3,T4> 에 대한 결과를 보여 줍니다.
using System;
using System.Collections;
public class Item3And4Comparer<T1, T2, T3, T4> : IEqualityComparer
{
private int argument = 0;
new public bool Equals(object x, object y)
{
argument++;
// Return true for all values of Item1, Item2.
if (argument <= 2)
return true;
else
return x.Equals(y);
}
public int GetHashCode(object obj)
{
if (obj is T1)
return ((T1) obj).GetHashCode();
else if (obj is T2)
return ((T2) obj).GetHashCode();
else if (obj is T3)
return ((T3) obj).GetHashCode();
else
return ((T4) obj).GetHashCode();
}
}
public class Example
{
public static void Main()
{
Tuple<string, int, double, double>[] temperatures =
{ Tuple.Create("New York, NY", 4, 61.0, 43.0),
Tuple.Create("Chicago, IL", 2, 34.0, 18.0),
Tuple.Create("Newark, NJ", 4, 61.0, 43.0),
Tuple.Create("Boston, MA", 6, 77.0, 59.0),
Tuple.Create("Detroit, MI", 9, 74.0, 53.0),
Tuple.Create("Minneapolis, MN", 8, 81.0, 61.0) };
// Compare each item with every other item for equality.
for (int ctr = 0; ctr < temperatures.Length; ctr++)
{
IStructuralEquatable temperatureInfo = temperatures[ctr];
for (int ctr2 = ctr + 1; ctr2 < temperatures.Length; ctr2++)
Console.WriteLine("{0} = {1}: {2}",
temperatureInfo, temperatures[ctr2],
temperatureInfo.Equals(temperatures[ctr2],
new Item3And4Comparer<string, int, double, double>()));
Console.WriteLine();
}
}
}
// The example displays the following output:
// (New York, NY, 4, 61, 43) = (Chicago, IL, 2, 34, 18): False
// (New York, NY, 4, 61, 43) = (Newark, NJ, 4, 61, 43): True
// (New York, NY, 4, 61, 43) = (Boston, MA, 6, 77, 59): False
// (New York, NY, 4, 61, 43) = (Detroit, MI, 9, 74, 53): False
// (New York, NY, 4, 61, 43) = (Minneapolis, MN, 8, 81, 61): False
//
// (Chicago, IL, 2, 34, 18) = (Newark, NJ, 4, 61, 43): False
// (Chicago, IL, 2, 34, 18) = (Boston, MA, 6, 77, 59): False
// (Chicago, IL, 2, 34, 18) = (Detroit, MI, 9, 74, 53): False
// (Chicago, IL, 2, 34, 18) = (Minneapolis, MN, 8, 81, 61): False
//
// (Newark, NJ, 4, 61, 43) = (Boston, MA, 6, 77, 59): False
// (Newark, NJ, 4, 61, 43) = (Detroit, MI, 9, 74, 53): False
// (Newark, NJ, 4, 61, 43) = (Minneapolis, MN, 8, 81, 61): False
//
// (Boston, MA, 6, 77, 59) = (Detroit, MI, 9, 74, 53): False
// (Boston, MA, 6, 77, 59) = (Minneapolis, MN, 8, 81, 61): False
//
// (Detroit, MI, 9, 74, 53) = (Minneapolis, MN, 8, 81, 61): False
open System
open System.Collections
type Item3And4Comparer<'T1, 'T2, 'T3, 'T4 when 'T1: equality and 'T2: equality and 'T3: equality and 'T4: equality>() =
let mutable argument = 0
interface IEqualityComparer with
member _.Equals(x: obj, y: obj) =
argument <- argument + 1
// Return true for all values of Item1, Item2.
if argument <= 2 then
true
else
x.Equals y
member _.GetHashCode(obj: obj) =
match obj with
| :? 'T1 as obj ->
obj.GetHashCode()
| :? 'T2 as obj ->
obj.GetHashCode()
| :? 'T3 as obj ->
obj.GetHashCode()
| _ ->
(obj :?> 'T4).GetHashCode()
let temperatures =
[| Tuple.Create("New York, NY", 4, 61.0, 43.0)
Tuple.Create("Chicago, IL", 2, 34.0, 18.0)
Tuple.Create("Newark, NJ", 4, 61.0, 43.0)
Tuple.Create("Boston, MA", 6, 77.0, 59.0)
Tuple.Create("Detroit, MI", 9, 74.0, 53.0)
Tuple.Create("Minneapolis, MN", 8, 81.0, 61.0) |]
// Compare each item with every other item for equality.
for ctr = 0 to temperatures.Length - 1 do
let temperatureInfo: IStructuralEquatable = temperatures[ctr]
for ctr2 = ctr + 1 to temperatures.Length - 1 do
printfn $"{temperatureInfo} = {temperatures[ctr2]}: {temperatureInfo.Equals(temperatures[ctr2], Item3And4Comparer<string, int, double, double>())}"
printfn ""
// The example displays the following output:
// (New York, NY, 4, 61, 43) = (Chicago, IL, 2, 34, 18): False
// (New York, NY, 4, 61, 43) = (Newark, NJ, 4, 61, 43): True
// (New York, NY, 4, 61, 43) = (Boston, MA, 6, 77, 59): False
// (New York, NY, 4, 61, 43) = (Detroit, MI, 9, 74, 53): False
// (New York, NY, 4, 61, 43) = (Minneapolis, MN, 8, 81, 61): False
//
// (Chicago, IL, 2, 34, 18) = (Newark, NJ, 4, 61, 43): False
// (Chicago, IL, 2, 34, 18) = (Boston, MA, 6, 77, 59): False
// (Chicago, IL, 2, 34, 18) = (Detroit, MI, 9, 74, 53): False
// (Chicago, IL, 2, 34, 18) = (Minneapolis, MN, 8, 81, 61): False
//
// (Newark, NJ, 4, 61, 43) = (Boston, MA, 6, 77, 59): False
// (Newark, NJ, 4, 61, 43) = (Detroit, MI, 9, 74, 53): False
// (Newark, NJ, 4, 61, 43) = (Minneapolis, MN, 8, 81, 61): False
//
// (Boston, MA, 6, 77, 59) = (Detroit, MI, 9, 74, 53): False
// (Boston, MA, 6, 77, 59) = (Minneapolis, MN, 8, 81, 61): False
//
// (Detroit, MI, 9, 74, 53) = (Minneapolis, MN, 8, 81, 61): False
Imports System.Collections
Public Class Item3And4Comparer(Of T1, T2, T3, T4) : Implements IEqualityComparer
Private argument As Integer = 0
Public Overloads Function Equals(x As Object, y As Object) As Boolean _
Implements IEqualityComparer.Equals
argument += 1
' Return true for all values of Item1, Item2.
If argument <= 2 Then
Return True
Else
Return x.Equals(y)
End If
End Function
Public Overloads Function GetHashCode(obj As Object) As Integer _
Implements IEqualityComparer.GetHashCode
If TypeOf obj Is T1 Then
Return CType(obj, T1).GetHashCode()
ElseIf TypeOf obj Is T2 Then
Return CType(obj, T2).GetHashCode()
ElseIf TypeOf obj Is T3 Then
REturn CType(Obj, T3).GetHashCode()
Else
Return CType(obj, T4).GetHashCode()
End If
End Function
End Class
Module Example
Public Sub Main()
Dim temperatures() =
{ Tuple.Create("New York, NY", 4, 61, 43), _
Tuple.Create("Chicago, IL", 2, 34, 18), _
Tuple.Create("Newark, NJ", 4, 61, 43), _
Tuple.Create("Boston, MA", 6, 77, 59), _
Tuple.Create("Detroit, MI", 9, 74, 53), _
Tuple.Create("Minneapolis, MN", 8, 81, 61) }
' Compare each item with every other item for equality.
For ctr As Integer = 0 To temperatures.Length - 1
Dim temperatureInfo As IStructuralEquatable = temperatures(ctr)
For ctr2 As Integer = ctr + 1 To temperatures.Length - 1
Console.WriteLine("{0} = {1}: {2}",
temperatureInfo, temperatures(ctr2),
temperatureInfo.Equals(temperatures(ctr2),
New Item3And4Comparer(Of String, Integer, Double, Double)))
Next
Console.WriteLine()
Next
End Sub
End Module
' The example displays the following output:
' (New York, NY, 4, 61, 43) = (Chicago, IL, 2, 34, 18): False
' (New York, NY, 4, 61, 43) = (Newark, NJ, 4, 61, 43): True
' (New York, NY, 4, 61, 43) = (Boston, MA, 6, 77, 59): False
' (New York, NY, 4, 61, 43) = (Detroit, MI, 9, 74, 53): False
' (New York, NY, 4, 61, 43) = (Minneapolis, MN, 8, 81, 61): False
'
' (Chicago, IL, 2, 34, 18) = (Newark, NJ, 4, 61, 43): False
' (Chicago, IL, 2, 34, 18) = (Boston, MA, 6, 77, 59): False
' (Chicago, IL, 2, 34, 18) = (Detroit, MI, 9, 74, 53): False
' (Chicago, IL, 2, 34, 18) = (Minneapolis, MN, 8, 81, 61): False
'
' (Newark, NJ, 4, 61, 43) = (Boston, MA, 6, 77, 59): False
' (Newark, NJ, 4, 61, 43) = (Detroit, MI, 9, 74, 53): False
' (Newark, NJ, 4, 61, 43) = (Minneapolis, MN, 8, 81, 61): False
'
' (Boston, MA, 6, 77, 59) = (Detroit, MI, 9, 74, 53): False
' (Boston, MA, 6, 77, 59) = (Minneapolis, MN, 8, 81, 61): False
'
' (Detroit, MI, 9, 74, 53) = (Minneapolis, MN, 8, 81, 61): False
설명
이 멤버는 명시적 인터페이스 멤버 구현이며, Tuple<T1,T2,T3,T4> 인스턴스가 IStructuralEquatable 인터페이스로 캐스팅된 경우에만 사용할 수 있습니다.
구현은 IEqualityComparer.Equals 그렇지 않은 null
경우에만 호출되며, 구성 요소가 현재 인스턴스와 동일한 형식인 개체로 성공적으로 캐스팅(C#) 또는 변환(Visual Basic)Tuple<T1,T2,T3,T4>할 수 있는 경우에만 other
호출됩니다. 메서드는 IStructuralEquatable.Equals(Object, IEqualityComparer) 먼저 구현과 Item1 비교할 IEqualityComparer.Equals 개체의 Tuple<T1,T2,T3,T4> 값을 전달합니다. 이 메서드 호출이 반환true
되면 메서드가 다시 호출되고 두 Tuple<T1,T2,T3,T4> 개체의 값이 전달됩니다Item2. 이 메서드 호출이 다시 반환 true
되면 메서드를 세 번째로 호출하고 두 Tuple<T1,T2,T3,T4> 개체의 값을 전달 Item3 합니다. 이 메서드 호출이 다시 반환 true
되면 메서드는 네 번째 및 마지막 시간에 대해 호출되고 두 Tuple<T1,T2,T3,T4> 개체의 값을 전달 Item4 합니다.