Tuple<T1,T2,T3>.IStructuralEquatable.Equals Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Restituisce un valore che indica se l'oggetto Tuple<T1,T2,T3> corrente è uguale a un oggetto specificato in base a un metodo di confronto specificato.
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
Parametri
- other
- Object
Oggetto da confrontare con questa istanza.
- comparer
- IEqualityComparer
Oggetto che definisce il metodo da usare per valutare se i due oggetti sono uguali.
Restituisce
true
se l'istanza corrente è uguale all'oggetto specificato; in caso contrario, false
.
Implementazioni
Esempio
L'esempio seguente definisce una Item2Comparer
classe che implementa l'interfaccia e modifica il modo in cui Tuple<T1,T2,T3> gli oggetti vengono valutati per l'uguaglianzaIEqualityComparer. Il metodo restituisce true
sempre quando viene passato i valori delle proprietà di due Tuple<T1,T2,T3> oggetti e chiama il Tuple<T1,T2,T3>.IStructuralEquatable.Equals metodo per valutare Item2 i Item1 valori delle proprietà. Se questa chiamata al metodo restituisce true
, Item3 i valori delle proprietà vengono passati al metodo, che restituisce true
sempre . Di conseguenza, il metodo verifica l'uguaglianza Item2 in base solo al valore della proprietà. L'output illustra il risultato di un set di dati di Tuple<T1,T2,T3> oggetti che registrano i nomi, il punteggio di test medio e il numero di test degli studenti in una classe.
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
Commenti
Questo membro è un’implementazione esplicita di un membro di interfaccia. Può essere utilizzato solo quando si esegue il cast dell'istanza Tuple<T1,T2,T3> a un'interfaccia IStructuralEquatable.
L'implementazione IEqualityComparer.Equals viene chiamata solo se other
non null
è e se può essere eseguito correttamente il cast (in C#) o la conversione (in Visual Basic) in un Tuple<T1,T2,T3> oggetto i cui componenti sono degli stessi tipi dell'istanza corrente. Il Tuple<T1,T2,T3>.IStructuralEquatable.Equals metodo passa innanzitutto i Item1 valori degli Tuple<T1,T2,T3> oggetti da confrontare con l'implementazione IEqualityComparer.Equals . Se questa chiamata al metodo restituisce true
, il metodo viene chiamato nuovamente e passato i Item2 valori dei due Tuple<T1,T2,T3> oggetti. Se questa chiamata al metodo restituisce true
di nuovo, il metodo viene chiamato una terza volta e passato i Item3 valori dei due Tuple<T1,T2,T3> oggetti.