Tuple<T1,T2,T3>.IStructuralEquatable.Equals Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Returnerar ett värde som anger om det aktuella Tuple<T1,T2,T3> objektet är lika med ett angivet objekt baserat på en angiven jämförelsemetod.
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
Parametrar
- other
- Object
Det objekt som ska jämföras med den här instansen.
- comparer
- IEqualityComparer
Ett objekt som definierar den metod som ska användas för att utvärdera om de två objekten är lika med.
Returer
trueom den aktuella instansen är lika med det angivna objektet; annars . false
Implementeringar
Exempel
I följande exempel definieras en Item2Comparer klass som implementerar IEqualityComparer gränssnittet och ändrar hur Tuple<T1,T2,T3> objekt utvärderas för likhet. Metoden returnerar true alltid när den skickas egenskapsvärdena för Item1 två Tuple<T1,T2,T3> objekt och anropar Tuple<T1,T2,T3>.IStructuralEquatable.Equals metoden för att utvärdera deras egenskapsvärden Item2 . Om det här metodanropet returnerar trueskickas deras Item3 egenskapsvärden till metoden, som alltid returnerar true. Därför testas metoden för likhet endast baserat på egenskapens Item2 värde. Utdata illustrerar resultatet för en datauppsättning med Tuple<T1,T2,T3> objekt som registrerar namn, genomsnittlig testpoäng och antal tester av elever i en klass.
using System;
using System.Collections;
public class Item2Comparer<T1, T2, T3> : IEqualityComparer
{
new public bool Equals(object x, object y)
{
// Return true for all values of Item1.
if (x is T1)
return true;
else if (x is T2)
return x.Equals(y);
else
return true;
}
public int GetHashCode(object obj)
{
if (obj is T1)
return ((T1) obj).GetHashCode();
else if (obj is T2)
return ((T2) obj).GetHashCode();
else
return ((T3) obj).GetHashCode();
}
}
public class Example
{
public static void Main()
{
Tuple<string, double, int>[] scores =
{ Tuple.Create("Ed", 78.8, 8),
Tuple.Create("Abbey", 92.1, 9),
Tuple.Create("Jim", 71.2, 9),
Tuple.Create("Sam", 91.7, 8),
Tuple.Create("Sandy", 71.2, 5),
Tuple.Create("Penelope", 82.9, 8),
Tuple.Create("Serena", 71.2, 9),
Tuple.Create("Judith", 84.3, 9) };
for (int ctr = 0; ctr < scores.Length; ctr++)
{
IStructuralEquatable score = scores[ctr];
for (int ctr2 = ctr + 1; ctr2 < scores.Length; ctr2++)
{
Console.WriteLine("{0} = {1}: {2}", score,
scores[ctr2],
score.Equals(scores[ctr2],
new Item2Comparer<string, double, int>()));
}
Console.WriteLine();
}
}
}
// The example displays the following output:
// (Ed, 78.8, 8) = (Abbey, 92.1, 9): False
// (Ed, 78.8, 8) = (Jim, 71.2, 9): False
// (Ed, 78.8, 8) = (Sam, 91.7, 8): False
// (Ed, 78.8, 8) = (Sandy, 71.2, 5): False
// (Ed, 78.8, 8) = (Penelope, 82.9, 8): False
// (Ed, 78.8, 8) = (Serena, 71.2, 9): False
// (Ed, 78.8, 8) = (Judith, 84.3, 9): False
//
// (Abbey, 92.1, 9) = (Jim, 71.2, 9): False
// (Abbey, 92.1, 9) = (Sam, 91.7, 8): False
// (Abbey, 92.1, 9) = (Sandy, 71.2, 5): False
// (Abbey, 92.1, 9) = (Penelope, 82.9, 8): False
// (Abbey, 92.1, 9) = (Serena, 71.2, 9): False
// (Abbey, 92.1, 9) = (Judith, 84.3, 9): False
//
// (Jim, 71.2, 9) = (Sam, 91.7, 8): False
// (Jim, 71.2, 9) = (Sandy, 71.2, 5): True
// (Jim, 71.2, 9) = (Penelope, 82.9, 8): False
// (Jim, 71.2, 9) = (Serena, 71.2, 9): True
// (Jim, 71.2, 9) = (Judith, 84.3, 9): False
//
// (Sam, 91.7, 8) = (Sandy, 71.2, 5): False
// (Sam, 91.7, 8) = (Penelope, 82.9, 8): False
// (Sam, 91.7, 8) = (Serena, 71.2, 9): False
// (Sam, 91.7, 8) = (Judith, 84.3, 9): False
//
// (Sandy, 71.2, 5) = (Penelope, 82.9, 8): False
// (Sandy, 71.2, 5) = (Serena, 71.2, 9): True
// (Sandy, 71.2, 5) = (Judith, 84.3, 9): False
//
// (Penelope, 82.9, 8) = (Serena, 71.2, 9): False
// (Penelope, 82.9, 8) = (Judith, 84.3, 9): False
//
// (Serena, 71.2, 9) = (Judith, 84.3, 9): False
open System
open System.Collections
type Item2Comparer<'T1, 'T2, 'T3 when 'T1: equality and 'T2: equality and 'T3: equality>() =
interface IEqualityComparer with
member _.Equals(x: obj, y: obj) =
// Return true for all values of Item1.
match x with
| :? 'T1 ->
true
| :? 'T2 ->
x.Equals y
| _ -> true
member _.GetHashCode(obj: obj) =
match obj with
| :? 'T1 as obj->
obj.GetHashCode()
| :? 'T2 as obj ->
obj.GetHashCode()
| _ ->
(obj :?> 'T3).GetHashCode()
let scores =
[| Tuple.Create("Ed", 78.8, 8)
Tuple.Create("Abbey", 92.1, 9)
Tuple.Create("Jim", 71.2, 9)
Tuple.Create("Sam", 91.7, 8)
Tuple.Create("Sandy", 71.2, 5)
Tuple.Create("Penelope", 82.9, 8)
Tuple.Create("Serena", 71.2, 9)
Tuple.Create("Judith", 84.3, 9) |]
for ctr = 0 to scores.Length - 1 do
let score : IStructuralEquatable = scores[ctr]
for ctr2 = ctr + 1 to scores.Length - 1 do
printfn $"{score} = {scores[ctr2]}: {score.Equals(scores[ctr2], Item2Comparer<string, double, int>())}"
printfn ""
// The example displays the following output:
// (Ed, 78.8, 8) = (Abbey, 92.1, 9): False
// (Ed, 78.8, 8) = (Jim, 71.2, 9): False
// (Ed, 78.8, 8) = (Sam, 91.7, 8): False
// (Ed, 78.8, 8) = (Sandy, 71.2, 5): False
// (Ed, 78.8, 8) = (Penelope, 82.9, 8): False
// (Ed, 78.8, 8) = (Serena, 71.2, 9): False
// (Ed, 78.8, 8) = (Judith, 84.3, 9): False
//
// (Abbey, 92.1, 9) = (Jim, 71.2, 9): False
// (Abbey, 92.1, 9) = (Sam, 91.7, 8): False
// (Abbey, 92.1, 9) = (Sandy, 71.2, 5): False
// (Abbey, 92.1, 9) = (Penelope, 82.9, 8): False
// (Abbey, 92.1, 9) = (Serena, 71.2, 9): False
// (Abbey, 92.1, 9) = (Judith, 84.3, 9): False
//
// (Jim, 71.2, 9) = (Sam, 91.7, 8): False
// (Jim, 71.2, 9) = (Sandy, 71.2, 5): True
// (Jim, 71.2, 9) = (Penelope, 82.9, 8): False
// (Jim, 71.2, 9) = (Serena, 71.2, 9): True
// (Jim, 71.2, 9) = (Judith, 84.3, 9): False
//
// (Sam, 91.7, 8) = (Sandy, 71.2, 5): False
// (Sam, 91.7, 8) = (Penelope, 82.9, 8): False
// (Sam, 91.7, 8) = (Serena, 71.2, 9): False
// (Sam, 91.7, 8) = (Judith, 84.3, 9): False
//
// (Sandy, 71.2, 5) = (Penelope, 82.9, 8): False
// (Sandy, 71.2, 5) = (Serena, 71.2, 9): True
// (Sandy, 71.2, 5) = (Judith, 84.3, 9): False
//
// (Penelope, 82.9, 8) = (Serena, 71.2, 9): False
// (Penelope, 82.9, 8) = (Judith, 84.3, 9): False
//
// (Serena, 71.2, 9) = (Judith, 84.3, 9): False
Imports System.Collections
Public Class Item2Comparer(Of T1, T2, T3) : Implements IEqualityComparer
Public Overloads Function Equals(x As Object, y As Object) As Boolean _
Implements IEqualityComparer.Equals
' Return true for all values of Item1.
If TypeOf x Is T1 Then
Return True
ElseIf TypeOf x Is T2 Then
Return x.Equals(y)
Else
Return True
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()
Else
Return CType(obj, T3).GetHashCode()
End If
End Function
End Class
Module Example
Public Sub Main()
Dim scores() =
{ Tuple.Create("Ed", 78.8, 8),
Tuple.Create("Abbey", 92.1, 9),
Tuple.Create("Jim", 71.2, 9),
Tuple.Create("Sam", 91.7, 8),
Tuple.Create("Sandy", 71.2, 5),
Tuple.Create("Penelope", 82.9, 8),
Tuple.Create("Serena", 71.2, 9),
Tuple.Create("Judith", 84.3, 9) }
For ctr As Integer = 0 To scores.Length - 1
Dim score As IStructuralEquatable = scores(ctr)
For ctr2 As Integer = ctr + 1 To scores.Length - 1
Console.WriteLine("{0} = {1}: {2}", score,
scores(ctr2),
score.Equals(scores(ctr2),
new Item2Comparer(Of String, Double, Integer)))
Next
Console.WriteLine()
Next
End Sub
End Module
' The example displays the following output:
' (Ed, 78.8, 8) = (Abbey, 92.1, 9): False
' (Ed, 78.8, 8) = (Jim, 71.2, 9): False
' (Ed, 78.8, 8) = (Sam, 91.7, 8): False
' (Ed, 78.8, 8) = (Sandy, 71.2, 5): False
' (Ed, 78.8, 8) = (Penelope, 82.9, 8): False
' (Ed, 78.8, 8) = (Serena, 71.2, 9): False
' (Ed, 78.8, 8) = (Judith, 84.3, 9): False
'
' (Abbey, 92.1, 9) = (Jim, 71.2, 9): False
' (Abbey, 92.1, 9) = (Sam, 91.7, 8): False
' (Abbey, 92.1, 9) = (Sandy, 71.2, 5): False
' (Abbey, 92.1, 9) = (Penelope, 82.9, 8): False
' (Abbey, 92.1, 9) = (Serena, 71.2, 9): False
' (Abbey, 92.1, 9) = (Judith, 84.3, 9): False
'
' (Jim, 71.2, 9) = (Sam, 91.7, 8): False
' (Jim, 71.2, 9) = (Sandy, 71.2, 5): True
' (Jim, 71.2, 9) = (Penelope, 82.9, 8): False
' (Jim, 71.2, 9) = (Serena, 71.2, 9): True
' (Jim, 71.2, 9) = (Judith, 84.3, 9): False
'
' (Sam, 91.7, 8) = (Sandy, 71.2, 5): False
' (Sam, 91.7, 8) = (Penelope, 82.9, 8): False
' (Sam, 91.7, 8) = (Serena, 71.2, 9): False
' (Sam, 91.7, 8) = (Judith, 84.3, 9): False
'
' (Sandy, 71.2, 5) = (Penelope, 82.9, 8): False
' (Sandy, 71.2, 5) = (Serena, 71.2, 9): True
' (Sandy, 71.2, 5) = (Judith, 84.3, 9): False
'
' (Penelope, 82.9, 8) = (Serena, 71.2, 9): False
' (Penelope, 82.9, 8) = (Judith, 84.3, 9): False
'
' (Serena, 71.2, 9) = (Judith, 84.3, 9): False
Kommentarer
Den här medlemmen är en explicit implementering av gränssnittsmedlemmar. Den kan endast användas när instansen Tuple<T1,T2,T3> skickas till ett IStructuralEquatable gränssnitt.
Implementeringen IEqualityComparer.Equals anropas endast om other inte är null, och om den kan konverteras (i C#) eller konverteras (i Visual Basic) till ett Tuple<T1,T2,T3> objekt vars komponenter är av samma typ som den aktuella instansen. Metoden Tuple<T1,T2,T3>.IStructuralEquatable.Equals skickar först värdena för Item1 de objekt som Tuple<T1,T2,T3> ska jämföras med implementeringen IEqualityComparer.Equals . Om det här metodanropet returnerar trueanropas metoden igen och skickar värdena för Item2 de två Tuple<T1,T2,T3> objekten. Om det här metodanropet returnerar true igen anropas metoden en tredje gång och skickar värdena för Item3 de två Tuple<T1,T2,T3> objekten.