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

Définition

Retourne une valeur qui indique si l'objet Tuple<T1,T2,T3,T4,T5,T6> 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

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

Implémente

Exemples

L’exemple suivant définit une RateComparer classe qui effectue un test personnalisé pour l’égalité. Si les valeurs passées à sa IStructuralEquatable.Equals méthode sont de type Single ou Double, la méthode teste l’égalité en utilisant uniquement jusqu’à trois chiffres fractionnaires. Sinon, il appelle simplement la x méthode du Equals paramètre. L’exemple utilise cette IEqualityComparer implémentation pour déterminer si quatre Tuple<T1,T2,T3,T4,T5,T6> objets qui contiennent des données sur le taux de changement de population entre 1960 et 2000 sont égaux.

C#
using System;
using System.Collections;

public class RateComparer<T1, T2, T3, T4, T5, T6> : IEqualityComparer
{
   private int argument = 0;

   public new bool Equals(object x, object y) 
   {
      argument++;
      if (argument == 1) return true;

      double fx, fy; 
      if (x is Double || x is Single)
      {
            fx = (double) x;
            fy = (double) y;
            return Math.Round(fx * 1000).Equals(Math.Round(fy * 1000));
      }
      else
      {
         return x.Equals(y);
      }
   }
   
   public int GetHashCode(object obj)
   {
      if (obj is Single || obj is Double)
         return Math.Round(((double) obj) * 1000).GetHashCode();
      else
         return obj.GetHashCode();
   }                
}

public class Example
{
   public static void Main()
   {
      var rate1 = Tuple.Create("New York", .014505, -.1042733, 
                               .0354833, .093644, .0290792);
      var rate2 = Tuple.Create("Unknown City", .014505, -.1042733, 
                               .0354833, .093644, .0290792);
      var rate3 = Tuple.Create("Unknown City", .014505, -.1042733, 
                               .0354833, .093644, .029079);
      var rate4 = Tuple.Create("San Francisco", -.0332858, -.0512803, 
                               .0662544, .0728964, .0491912);
      IStructuralEquatable eq = rate1;
      // Compare first tuple with remaining two tuples.
      Console.WriteLine("{0} = ", rate1.ToString());
      Console.WriteLine("   {0} : {1}", rate2, 
                        eq.Equals(rate2, new RateComparer<string, double, double, double, double, double>()));
      Console.WriteLine("   {0} : {1}", rate3, 
                        eq.Equals(rate3, new RateComparer<string, double, double, double, double, double>()));
      Console.WriteLine("   {0} : {1}", rate4, 
                        eq.Equals(rate4, new RateComparer<string, double, double, double, double, double>()));
   }
}
// The example displays the following output:
//    (New York, 0.014505, -0.1042733, 0.0354833, 0.093644, 0.0290792) =
//       (Unknown City, 0.014505, -0.1042733, 0.0354833, 0.093644, 0.0290792) : True
//       (Unknown City, 0.014505, -0.1042733, 0.0354833, 0.093644, 0.029079) : True
//       (San Francisco, -0.0332858, -0.0512803, 0.0662544, 0.0728964, 0.0491912) : 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,T4,T5,T6> est castée en interface IStructuralEquatable.

L’implémentation IEqualityComparer.Equals est appelée uniquement si other n’est pas nullet si elle peut être correctement castée (en C#) ou convertie (en Visual Basic) en un Tuple<T1,T2,T3,T4,T5,T6> objet dont les composants sont des mêmes types que l’instance actuelle. La IStructuralEquatable.Equals(Object, IEqualityComparer) méthode passe d’abord les Item1 valeurs des Tuple<T1,T2,T3,T4,T5,T6> objets à comparer à l’implémentation IEqualityComparer.Equals . Si cet appel de méthode retourne true, la méthode est appelée à nouveau et a passé les Item2 valeurs des deux Tuple<T1,T2,T3,T4,T5,T6> objets. Cela se poursuit jusqu’à ce que l’appel de méthode retourne false lorsqu’il compare une paire spécifique de Item valeurs, ou que les deux Item6 valeurs soient passées à la méthode.

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, 8, 9, 10
.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, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0