Tuple<T1,T2,T3>.IStructuralEquatable.Equals(Object, IEqualityComparer) Metodo

Definizione

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.Returns a value that indicates whether the current Tuple<T1,T2,T3> object is equal to a specified object based on a specified comparison method.

 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);
Function Equals (other As Object, comparer As IEqualityComparer) As Boolean Implements IStructuralEquatable.Equals

Parametri

other
Object

Oggetto da confrontare con questa istanza.The object to compare with this instance.

comparer
IEqualityComparer

Oggetto che definisce il metodo da usare per valutare se i due oggetti sono uguali.An object that defines the method to use to evaluate whether the two objects are equal.

Restituisce

true se l'istanza corrente è uguale all'oggetto specificato; in caso contrario, false.true if the current instance is equal to the specified object; otherwise, false.

Implementazioni

Esempi

Nell'esempio seguente viene definita una classe Item2Comparer che implementa l'interfaccia IEqualityComparer e cambia il modo in cui Tuple<T1,T2,T3> oggetti vengono valutati per verificarne l'uguaglianza.The following example defines an Item2Comparer class that implements the IEqualityComparer interface and changes the way in which Tuple<T1,T2,T3> objects are evaluated for equality. Il metodo restituisce sempre true quando vengono passati i valori della proprietà Item1 di due oggetti Tuple<T1,T2,T3> e chiama il metodo Tuple<T1,T2,T3>.IStructuralEquatable.Equals per valutare i valori delle proprietà Item2.The method always returns true when it is passed the Item1 property values of two Tuple<T1,T2,T3> objects, and it calls the Tuple<T1,T2,T3>.IStructuralEquatable.Equals method to evaluate their Item2 property values. Se questa chiamata al metodo restituisce true, i relativi valori di proprietà Item3 vengono passati al metodo, che restituisce sempre true.If this method call returns true, their Item3 property values are passed to the method, which always returns true. Di conseguenza, il metodo verifica l'uguaglianza solo in base al valore della proprietà Item2.As a result, the method tests for equality based only on the value of the Item2 property. L'output illustra il risultato di un set di dati di Tuple<T1,T2,T3> oggetti che registrano i nomi, il Punteggio medio del test e il numero di test degli studenti in una classe.The output illustrates the result for a data set of Tuple<T1,T2,T3> objects that record the names, mean test score, and number of tests of students in a class.

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
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 dell'interfaccia.This member is an explicit interface member implementation. Può essere utilizzato solo quando si esegue il cast dell'istanza Tuple<T1,T2,T3> a un'interfaccia IStructuralEquatable.It can be used only when the Tuple<T1,T2,T3> instance is cast to an IStructuralEquatable interface.

L'implementazione del IEqualityComparer.Equals viene chiamata solo se other non è nulle se è possibile eseguire correttamente il cast ( C#in) o la conversione (in Visual Basic) in un oggetto Tuple<T1,T2,T3> i cui componenti sono degli stessi tipi dell'istanza corrente.The IEqualityComparer.Equals implementation is called only if other is not null, and if it can be successfully cast (in C#) or converted (in Visual Basic) to a Tuple<T1,T2,T3> object whose components are of the same types as the current instance. Il metodo Tuple<T1,T2,T3>.IStructuralEquatable.Equals passa innanzitutto i valori Item1 degli oggetti Tuple<T1,T2,T3> da confrontare con l'implementazione di IEqualityComparer.Equals.The Tuple<T1,T2,T3>.IStructuralEquatable.Equals method first passes the Item1 values of the Tuple<T1,T2,T3> objects to be compared to the IEqualityComparer.Equals implementation. Se questa chiamata al metodo restituisce true, viene chiamato nuovamente il metodo e vengono passati i valori Item2 dei due oggetti Tuple<T1,T2,T3>.If this method call returns true, the method is called again and passed the Item2 values of the two Tuple<T1,T2,T3> objects. Se questa chiamata al metodo restituisce di nuovo true, il metodo viene chiamato una terza volta e passa i valori Item3 dei due oggetti Tuple<T1,T2,T3>.If this method call returns true again, the method is called a third time and passed the Item3 values of the two Tuple<T1,T2,T3> objects.

Si applica a