Tuple<T1,T2,T3>.IStructuralEquatable.Equals Méthode

Définition

Retourne une valeur qui indique si l'objet Tuple<T1,T2,T3> actif est égal à un objet spécifié selon une méthode de comparaison spécifiée.

C#
bool IStructuralEquatable.Equals (object other, System.Collections.IEqualityComparer comparer);

Paramètres

other
Object

Objet à comparer avec cette instance.

comparer
IEqualityComparer

Un objet qui définit la méthode à utiliser pour évaluer si les deux objets sont égaux.

Retours

Boolean

true si l'instance actuelle est égale à l'objet spécifié ; sinon, false.

Implémente

Exemples

L’exemple suivant définit une Item2Comparer classe qui implémente l’interface IEqualityComparer et modifie la façon dont Tuple<T1,T2,T3> les objets sont évalués pour l’égalité. La méthode retourne true toujours lorsqu’elle passe les Item1 valeurs de propriété de deux Tuple<T1,T2,T3> objets, et appelle la Tuple<T1,T2,T3>.IStructuralEquatable.Equals méthode pour évaluer leurs Item2 valeurs de propriété. Si cet appel de méthode retourne true, leurs Item3 valeurs de propriété sont passées à la méthode, qui retourne truetoujours . Par conséquent, la méthode teste l’égalité uniquement en fonction de la valeur de la Item2 propriété. La sortie illustre le résultat d’un jeu de données d’objets Tuple<T1,T2,T3> qui enregistrent les noms, le score moyen de test et le nombre de tests des étudiants dans une classe.

C#
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

Remarques

Ce membre est une implémentation d'un membre d'interface explicite. Il peut uniquement être utilisé lorsque l'instance de Tuple<T1,T2,T3> est castée en interface IStructuralEquatable.

L’implémentation IEqualityComparer.Equals est appelée uniquement si other elle n’est pasnull, et si elle peut être correctement castée (en C#) ou convertie (en Visual Basic) en objet Tuple<T1,T2,T3> dont les composants sont des mêmes types que l’instance actuelle. La Tuple<T1,T2,T3>.IStructuralEquatable.Equals méthode transmet d’abord les Item1 valeurs des Tuple<T1,T2,T3> objets à comparer à l’implémentation IEqualityComparer.Equals . Si cet appel de méthode retourne true, la méthode est appelée à nouveau et passe les Item2 valeurs des deux Tuple<T1,T2,T3> objets. Si cet appel de méthode retourne true à nouveau, la méthode est appelée une troisième fois et passe les Item3 valeurs des deux Tuple<T1,T2,T3> objets.

S’applique à

Produit Versions
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0